mirror of
https://github.com/ganelson/inform.git
synced 2024-06-30 22:14:58 +03:00
Updated phrase options
This commit is contained in:
parent
7b2df20585
commit
1ff736a2a0
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6R64 'Krypton' (28 March 2021)
|
||||
v10.1.0-alpha.1+6R65 'Krypton' (29 March 2021)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 28 March 2021
|
||||
Build Number: 6R64
|
||||
Build Date: 29 March 2021
|
||||
Build Number: 6R65
|
||||
|
|
|
@ -163,7 +163,7 @@ OP match the following:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">use_option</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure use_option is accessed in 3/dbtr, 3/rpr, 4/ass, 5/tpf, 6/tc, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure use_option is accessed in 3/dbtr, 3/rpr, 4/ass, 5/tpf, 5/po, 6/tc, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>§3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new use option</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
|
|
|
@ -185,7 +185,7 @@ container (called the sack) is capacious if...".
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-idf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresscurrent">adf</li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-tpf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-idf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresscurrent">adf</li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-tpf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -276,7 +276,6 @@ Inform 7 source text written underneath the heading.
|
|||
<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">id_body</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">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head_of_defn</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">id_type_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">type_data</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">id_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_data</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">id_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">runtime_context_data</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">id_compilation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
|
@ -286,14 +285,13 @@ Inform 7 source text written underneath the heading.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">PHRASE_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Creating body: <%W>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">log_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">head_of_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Options::new</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">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Context::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</span><span class="plain-syntax"> = </span><a href="5-ptd.html#SP2" class="function-link"><span class="function-syntax">IDTypeData::new</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IDCompilation::new_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">at</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">body</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure id_body is accessed in 5/idf, 5/adf, 5/tpf, 5/ptd, 5/rf, 6/eqt and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure id_body is accessed in 5/idf, 5/adf, 5/tpf, 5/ptd, 5/po, 5/rf, 6/eqt and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>Definition bodies can be written in two different ways. In one way, the
|
||||
body is a list of instructions to follow. For example:
|
||||
</p>
|
||||
|
@ -442,7 +440,7 @@ Inter kit instead.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-imp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">id</li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-idf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-imp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">id</li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-idf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -294,7 +294,7 @@ go into the Phrasebook page of the index.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-id.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresscurrent">idf</li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-adf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-id.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresscurrent">idf</li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-adf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -41,10 +41,10 @@ function togglePopup(material_id) {
|
|||
<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="index.html"><span class="selectedlink">assertions</span></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="index.html"><span class="selectedlink">imperative</span></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="../if-module/index.html">if</a></li>
|
||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||
|
@ -70,92 +70,21 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Phrase Options' 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">imperative</a></li><li><a href="index.html#3">Chapter 3: Phrases</a></li><li><b>Phrase Options</b></li></ul></div>
|
||||
<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#5">Chapter 5: Imperative Code</a></li><li><b>Phrase Options</b></li></ul></div>
|
||||
<p class="purpose">To create and subsequently parse against the list of phrase options with which the user can choose to invoke a To phrase.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-po.html#SP3">§3. Creation</a></li><li><a href="3-po.html#SP4">§4. Parsing</a></li><li><a href="3-po.html#SP5">§5. Parsing phrase options in a declaration</a></li><li><a href="3-po.html#SP8">§8. Parsing phrase options in an invocation</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-po.html#SP1">§1. Introduction</a></li><li><a href="5-po.html#SP2">§2. Creation</a></li><li><a href="5-po.html#SP4">§4. Parsing</a></li><li><a href="5-po.html#SP6">§6. Parsing phrase options in a declaration</a></li><li><a href="5-po.html#SP8">§8. Parsing phrase options in an invocation</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>A "phrase option" is a sort of modifier tacked on to the instruction to
|
||||
do something, changing how it works but not enough to merit an entirely new
|
||||
phrase. It's like an argument passed to a routine which specifies optional
|
||||
behaviour, and indeed that will be how it is compiled.
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Introduction. </b>A "phrase option" is a sort of modifier tacked on to an invocation of a
|
||||
phrase; the only modifiers allowed are those declared in that phrase's
|
||||
preamble. Phrase pptions are an early feature of Inform 7 going back to a
|
||||
time when its priority was to enable the paraphrasing of Inform 6 library
|
||||
features (such as the bitmap passed as a parameter to the list-printer).
|
||||
</p>
|
||||
|
||||
<p class="commentary">Like the token names, phrase option names have local scope (which is why
|
||||
they are here and not in the excerpts database). Unlike them, they are not
|
||||
valid as values, since a condition is not also a value in Inform 7.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The packet of these associated with a phrase is stored in the PHOD structure.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_OPTIONS_PER_PHRASE</span><span class="plain-syntax"> </span><span class="constant-syntax">16</span><span class="plain-syntax"> </span><span class="comment-syntax"> because held in a 16-bit Z-machine bitmap</span>
|
||||
</pre>
|
||||
<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">id_options_data</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">phrase_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">options_permitted</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_OPTIONS_PER_PHRASE</span><span class="plain-syntax">]; </span><span class="comment-syntax"> see below</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_options_permitted</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_declaration</span><span class="plain-syntax">; </span><span class="comment-syntax"> the text declaring the whole set of options</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple_options_permitted</span><span class="plain-syntax">; </span><span class="comment-syntax"> can be combined, or mutually exclusive?</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure id_options_data is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>There's nothing to a phrase option, really:
|
||||
</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">phrase_option</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of name</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure phrase_option is accessed in 2/rls, 2/fao, 2/act, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Creation. </b>By default, a phrase has no options.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Options::new</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">id_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">.</span><span class="element-syntax">no_options_permitted</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">phod</span><span class="plain-syntax">.</span><span class="element-syntax">multiple_options_permitted</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">phod</span><span class="plain-syntax">.</span><span class="element-syntax">options_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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</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">Phrases::Options::allows_options</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</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="SP4" class="paragraph-anchor"></a><b>§4. Parsing. </b>This isn't very efficient, but doesn't need to be, since phrase options
|
||||
are parsed only in a condition context, not in a value context, and
|
||||
these are relatively rare in Inform source text.
|
||||
</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">Phrases::Options::parse</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">Phrases::Options::parse</span></span>:<br/><a href="3-po.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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">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"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</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">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">options_permitted</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]-></span><span class="element-syntax">name</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="identifier-syntax">i</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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Parsing phrase options in a declaration. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb_being_parsed</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">Phrases::Options::parse_declared_options</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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">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="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">options_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">phod_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><phrase-option-declaration-list></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"><<r>></span><span class="plain-syntax">) </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">multiple_options_permitted</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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>I have to say that I regret the syntax for phrase options, which makes
|
||||
us write commas like the one here:
|
||||
<p class="commentary">I now sligjtly regret the existence of phrase options, but above all the
|
||||
comma-based syntax used for them, as here. Brackets would have been better;
|
||||
it makes phrase options impossible to use for text substitutions.
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
|
@ -168,74 +97,153 @@ But it's mostly the comma which annoys me (making text substitutions unable
|
|||
to support phrase options); I should have gone for brackets.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The syntax for declaring phrase options is uncontroversial — it's just
|
||||
a list of names — but there are wrinkles: if the list is divided with "or"
|
||||
then the options are mutually exclusive, but with "and/or" they're not.
|
||||
For example, in:
|
||||
<p class="commentary">The <a href="5-po.html#SP1" class="internal">id_options_data</a> for an imperative definition, which is part of its
|
||||
type data, says what options it allows:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>To decide which object is best route from (R1 - object) to (R2 - object), using doors or using even locked doors: ...</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">the following parses this list:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>using doors or using even locked doors</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">and creates two options with <phrase-option-declaration-setting-entry>.
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><phrase-option-declaration-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { lookahead }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-tail></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"> { pass 2 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { FALSE, - }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-declaration-tail></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-constant-syntax">_or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-list></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"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">\and/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-list></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"> { TRUE, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-list></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"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">\and/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-declaration-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, - }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-declaration-setting-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">...</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"> { lookahead }</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="named-paragraph-container code-font"><a href="3-po.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Add a phrase option</span><span class="named-paragraph-number">6.1</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_OPTIONS_PER_PHRASE</span><span class="plain-syntax"> </span><span class="constant-syntax">16</span><span class="plain-syntax"> </span><span class="comment-syntax"> because held in a 16-bit Z-machine bitmap</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>§6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add a phrase option</span><span class="named-paragraph-number">6.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
<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">id_options_data</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">phrase_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">options_permitted</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_OPTIONS_PER_PHRASE</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">no_options_permitted</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_declaration</span><span class="plain-syntax">; </span><span class="comment-syntax"> the text declaring the whole set of options</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">multiple_options_permitted</span><span class="plain-syntax">; </span><span class="comment-syntax"> can be combined, or mutually exclusive?</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax">;</span>
|
||||
|
||||
<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">phrase_option</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of name</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure id_options_data is private to this section.</li><li>The structure phrase_option is accessed in 3/nuor, 3/dbtr, 3/rpr, 4/ass, 5/tpf, 6/tc, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Creation. </b>By default, a phrase has no options.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="3-po.html#SP7" class="function-link"><span class="function-syntax">Phrases::Options::phod_add_phrase_option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phod_being_parsed</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">FALSE</span><span class="plain-syntax">, - };</span>
|
||||
<span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> </span><span class="function-syntax">PhraseOptions::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">PhraseOptions::new</span></span>:<br/>Phrase Type Data - <a href="5-ptd.html#SP2">§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">id_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">.</span><span class="element-syntax">no_options_permitted</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">phod</span><span class="plain-syntax">.</span><span class="element-syntax">multiple_options_permitted</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">phod</span><span class="plain-syntax">.</span><span class="element-syntax">options_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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</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">PhraseOptions::allows_options</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">options_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</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>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-po.html#SP6">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§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="identifier-syntax">too_many_POs_error</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">Phrases::Options::phod_add_phrase_option</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">Phrases::Options::phod_add_phrase_option</span></span>:<br/><a href="3-po.html#SP6_1">§6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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="identifier-syntax">PM_TooManyPhraseOptions_issued</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">PhraseOptions::phod_add_phrase_option</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">PhraseOptions::phod_add_phrase_option</span></span>:<br/><a href="5-po.html#SP7_1">§7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">PHRASE_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Adding phrase option <%W>\n"</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">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_OPTIONS_PER_PHRASE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">too_many_POs_error</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">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_TooManyPhraseOptions</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PM_TooManyPhraseOptions_issued</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">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_TooManyPhraseOptions</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"a phrase is only allowed to have 16 different options"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"so either some of these will need to go, or you may want to "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"consider breaking up the phrase into simpler ones whose usage "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"is easier to describe."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">too_many_POs_error</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"so either some of these will need to go, or you may want to consider "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"breaking up the phrase into simpler ones whose usage is easier to describe."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PM_TooManyPhraseOptions_issued</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="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">too_many_POs_error</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> so that the problem can recur on later phrases</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PM_TooManyPhraseOptions_issued</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> so the problem can recur on later phrases</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">po</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">po</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_permitted</span><span class="plain-syntax">[</span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">po</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Parsing. </b>This isn't very efficient, but doesn't need to be, since phrase options are parsed
|
||||
only in a condition context, not in a value context, and these are relatively
|
||||
rare in Inform source text.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PhraseOptions::parse_phod</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">PhraseOptions::parse_phod</span></span>:<br/><a href="5-po.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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">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"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</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">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">options_permitted</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]-></span><span class="element-syntax">name</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="identifier-syntax">i</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">PhraseOptions::parse</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="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><a href="5-po.html#SP4" class="function-link"><span class="function-syntax">PhraseOptions::parse_phod</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">options_data</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="SP5" class="paragraph-anchor"></a><b>§5. </b>Which we wrap up thus:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><phrase-option></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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">bitmap</span><span class="Preform-plain-syntax"> = </span><a href="5-po.html#SP4" class="function-link"><span class="Preform-function-syntax">PhraseOptions::parse_phod</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">phod_being_parsed</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">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">bitmap</span><span class="Preform-plain-syntax"> == -1) { ==> { </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-identifier-syntax">bitmap</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>
|
||||
</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" class="paragraph-anchor"></a><b>§6. Parsing phrase options in a declaration. </b>The following is called with <span class="extract"><span class="Preform-extract-syntax">W</span></span> set to just the part of a phrase prototype
|
||||
containing its phrase options. In this example:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">best</span><span class="plain-syntax"> </span><span class="identifier-syntax">route</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R1</span><span class="plain-syntax"> - </span><span class="identifier-syntax">object</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R2</span><span class="plain-syntax"> - </span><span class="identifier-syntax">object</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">using</span><span class="plain-syntax"> </span><span class="identifier-syntax">doors</span><span class="plain-syntax"> </span><span class="identifier-syntax">or</span><span class="plain-syntax"> </span><span class="identifier-syntax">using</span><span class="plain-syntax"> </span><span class="identifier-syntax">even</span><span class="plain-syntax"> </span><span class="identifier-syntax">locked</span><span class="plain-syntax"> </span><span class="identifier-syntax">doors</span><span class="plain-syntax">:</span>
|
||||
</pre>
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">W</span></span> would be "using doors or using even locked doors".
|
||||
</p>
|
||||
|
||||
<p class="commentary">The syntax is just a list of names, but with the wrinkle that if the list is divided
|
||||
with "or" then the options are mutually exclusive, but with "and/or" they're not.
|
||||
</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">PhraseOptions::parse_declared_options</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">PhraseOptions::parse_declared_options</span></span>:<br/>Parsing Type Data - <a href="5-ptd2.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phod</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">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="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">options_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">phod_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><phrase-option-decl-list></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"><<r>></span><span class="plain-syntax">) </span><span class="identifier-syntax">phod</span><span class="plain-syntax">-></span><span class="element-syntax">multiple_options_permitted</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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Note the following Preform grammar passes the return value <span class="extract"><span class="extract-syntax">TRUE</span></span> up from
|
||||
the final element of the list when the connective used for it was "and/or".
|
||||
Note also the rare use of the Preform literal marker in <span class="extract"><span class="extract-syntax">\and/or</span></span> to show
|
||||
that the slash between "and" and "or" is part of the word.
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><phrase-option-decl-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { lookahead }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-tail></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"> { pass 2 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { FALSE, - }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-decl-tail></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-constant-syntax">_or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-list></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"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">\and/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-list></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"> { TRUE, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-list></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"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">\and/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-decl-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, - }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-decl-setting-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">...</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"> { lookahead }</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="named-paragraph-container code-font"><a href="5-po.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Add a phrase option</span><span class="named-paragraph-number">7.1</span></a></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="SP7_1" class="paragraph-anchor"></a><b>§7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add a phrase option</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">
|
||||
<span class="plain-syntax"> </span><a href="5-po.html#SP3" class="function-link"><span class="function-syntax">PhraseOptions::phod_add_phrase_option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phod_being_parsed</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">FALSE</span><span class="plain-syntax">, - };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-po.html#SP7">§7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Parsing phrase options in an invocation. </b>At this point, we're looking at the text after the first comma in something
|
||||
like:
|
||||
</p>
|
||||
|
@ -264,18 +272,18 @@ produce.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod_being_parsed_silently</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> context for the grammar below</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Options::parse_invoked_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">silently</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="6-inv.html#SP19" class="function-link"><span class="function-syntax">Invocations::get_phrase_options</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PhraseOptions::parse_invoked_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">silently</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Invocations::get_phrase_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">idb</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax">-></span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">options_data</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">bitmap</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">pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-po.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Parse the supplied list of options into a bitmap</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="5-po.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Parse the supplied list of options into a bitmap</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="6-inv.html#SP20" class="function-link"><span class="function-syntax">Invocations::set_phrase_options_bitmap</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">bitmap</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Invocations::set_phrase_options_bitmap</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">bitmap</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> > </span><span class="identifier-syntax">pc</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>
|
||||
|
@ -291,11 +299,11 @@ produce.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pc</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax">-></span><span class="element-syntax">multiple_options_permitted</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-po.html#SP8_1_1" class="named-paragraph-link"><span class="named-paragraph">Reject this if multiple options are set</span><span class="named-paragraph-number">8.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-po.html#SP8_1_1" class="named-paragraph-link"><span class="named-paragraph">Reject this if multiple options are set</span><span class="named-paragraph-number">8.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-po.html#SP8">§8</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-po.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8_1_1" class="paragraph-anchor"></a><b>§8.1.1. </b>Ah, bit-twiddling: fun for all the family. There's no point computing the
|
||||
Hamming distance of the bitmap, that is, the number of bits set: we only need
|
||||
population count of the bitmap, that is, the number of bits set: we only need
|
||||
to know if it's a power of 2 or not. Note that subtracting 1, in binary,
|
||||
clears the least significant set bit, leaves the higher bits as they are,
|
||||
and changes the lower bits (which were previously all 0s) to 1s. So taking
|
||||
|
@ -314,7 +322,8 @@ this residue is zero.
|
|||
<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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_phrase</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax">-></span><span class="element-syntax">options_declaration</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PhraseOptionsExclusive</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PhraseOptionsExclusive</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, supplying the options '%2' to the phrase '%3', but "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the options listed for this phrase ('%4') are mutually exclusive."</span><span class="plain-syntax">);</span>
|
||||
|
@ -323,24 +332,24 @@ this residue is zero.
|
|||
<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>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-po.html#SP8_1">§8.1</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-po.html#SP8_1">§8.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>When setting options, in an actual use of a phrase, the list is divided
|
||||
by "and":
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><phrase-option-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { lookahead }</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"> { lookahead }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-tail></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"> { R[1] | R[2], - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-tail></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-constant-syntax">_and</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option-list></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"> { pass 1 }</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"><phrase-option-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</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"><phrase-option-list></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"> { pass 1 }</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"><phrase-option-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><phrase-option-setting-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option></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"> { pass 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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-po.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem</span><span class="named-paragraph-number">9.1</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><phrase-option></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"> { pass 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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-po.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem</span><span class="named-paragraph-number">9.1</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="SP9_1" class="paragraph-anchor"></a><b>§9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem</span><span class="named-paragraph-number">9.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
|
@ -353,13 +362,15 @@ by "and":
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_phrase</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax">-></span><span class="element-syntax">options_declaration</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax">-></span><span class="element-syntax">no_options_permitted</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::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NotAPhraseOption</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NotAPhraseOption</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but '%2' is not one of the options allowed on "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the end of the phrase '%3'. (The options allowed are: '%4'.)"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NotTheOnlyPhraseOption</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NotTheOnlyPhraseOption</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but the only option allowed on the end of the "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"phrase '%3' is '%4', so '%2' is not something I know how to "</span>
|
||||
|
@ -368,21 +379,9 @@ by "and":
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-po.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>The following matches any single phrase option for the phrase being used.
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><phrase-option></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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">bitmap</span><span class="Preform-plain-syntax"> = </span><a href="3-po.html#SP4" class="function-link"><span class="Preform-function-syntax">Phrases::Options::parse</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">phod_being_parsed</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">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">bitmap</span><span class="Preform-plain-syntax"> == -1) { ==> { </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-identifier-syntax">bitmap</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>
|
||||
</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>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-po.html#SP9">§9</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-prcd.html">❮</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-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-itp.html">itp</a></li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresscurrent">po</li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="4-lv.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ptd2.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresscurrent">po</li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-rf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -121,13 +121,15 @@ parts in brackets.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">manner_of_return</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_MOR</span></span><span class="comment-syntax"> values</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">return_kind</span><span class="plain-syntax">; </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">NULL</span></span><span class="comment-syntax"> except in the </span><span class="extract"><span class="extract-syntax">DECIDES_VALUE_MOR</span></span><span class="comment-syntax"> case</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">id_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_data</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">say_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_say</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only for "say" phrases, that is, text substitutions</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inline_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_inline</span><span class="plain-syntax">; </span><span class="comment-syntax"> side effects for phrases like C keywords</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">now_deprecated</span><span class="plain-syntax">; </span><span class="comment-syntax"> is this a phrase likely to be withdrawn in future?</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">id_type_data</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure id_type_data is accessed in 5/ptd2 and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure id_type_data is accessed in 5/ptd2, 5/po and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -141,6 +143,7 @@ parts in brackets.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">.</span><span class="element-syntax">as_say</span><span class="plain-syntax"> = </span><a href="5-ptd.html#SP19" class="function-link"><span class="function-syntax">IDTypeData::new_say_details</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax"> = </span><a href="5-ptd.html#SP20" class="function-link"><span class="function-syntax">IDTypeData::new_inline_details</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">.</span><span class="element-syntax">now_deprecated</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">idtd</span><span class="plain-syntax">.</span><span class="element-syntax">options_data</span><span class="plain-syntax"> = </span><a href="5-po.html#SP2" class="function-link"><span class="function-syntax">PhraseOptions::new</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -1102,7 +1105,7 @@ match is shown.
|
|||
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-tpf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresscurrent">ptd</li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-ptd2.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-tpf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresscurrent">ptd</li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-ptd2.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -94,7 +94,7 @@ adjusted for an inline definition (if that's the kind of definition this is).
|
|||
</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">ParsingIDTypeData::parse</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">ParsingIDTypeData::parse</span></span>:<br/>To Phrase Family - <a href="5-tpf.html#SP7">§7</a>, <a href="5-tpf.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingIDTypeData::parse</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">ParsingIDTypeData::parse</span></span>:<br/>To Phrase Family - <a href="5-tpf.html#SP7">§7</a>, <a href="5-tpf.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">say_flag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> is this going to be a "say" phrase?</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">XW</span><span class="plain-syntax">))</span>
|
||||
|
@ -104,6 +104,7 @@ adjusted for an inline definition (if that's the kind of definition this is).
|
|||
<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">XW</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="5-ptd2.html#SP6" class="function-link"><span class="function-syntax">ParsingIDTypeData::phtd_parse_doodads</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">, &</span><span class="identifier-syntax">say_flag</span><span class="plain-syntax">); </span><span class="comment-syntax"> and doodads from the back</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">EMPTY_WORDING</span><span class="plain-syntax">; </span><span class="comment-syntax"> the options wording</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cw</span><span class="plain-syntax"> = -1; </span><span class="comment-syntax"> word number of first comma</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ptd2.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Find the first comma outside of parentheses, if any exists</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cw</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
|
@ -111,12 +112,13 @@ adjusted for an inline definition (if that's the kind of definition this is).
|
|||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-ptd2.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Does this comma presage phrase options?</span><span class="named-paragraph-number">1.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">comma_presages_options</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say_flag</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-ptd2.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Issue a problem: say phrases aren't allowed options</span><span class="named-paragraph-number">1.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">OW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">, </span><span class="identifier-syntax">cw</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">OW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">, </span><span class="identifier-syntax">cw</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">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">, </span><span class="identifier-syntax">cw</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="comment-syntax"> trim the preamble range to to the text before the comma</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">-></span><span class="identifier-syntax">registration_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">XW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ptd2.html#SP9" class="function-link"><span class="function-syntax">ParsingIDTypeData::phtd_main_prototype</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-po.html#SP6" class="function-link"><span class="function-syntax">PhraseOptions::parse_declared_options</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">-></span><span class="element-syntax">options_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1" class="paragraph-anchor"></a><b>§1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the first comma outside of parentheses, if any exists</span><span class="named-paragraph-number">1.1</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -895,7 +897,7 @@ the hyphen, and this is sorely needed with complicated functional kinds.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ptd.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresscurrent">ptd2</li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-rf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ptd.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresscurrent">ptd2</li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-po.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1023,7 +1023,7 @@ any order would have done just as well.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-ptd2.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresscurrent">rf</li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="6-tc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-po.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresscurrent">rf</li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="6-tc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -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#5">Chapter 5: Imperative Code</a></li><li><b>To Phrase Family</b></li></ul></div>
|
||||
<p class="purpose">Imperative definitions of "To..." phrases.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-tpf.html#SP1">§1. Introduction</a></li><li><a href="5-tpf.html#SP3">§3. Identification</a></li><li><a href="5-tpf.html#SP5">§5. Assessment</a></li><li><a href="5-tpf.html#SP10">§10. Compilation</a></li><li><a href="5-tpf.html#SP11">§11. Access functions</a></li><li><a href="5-tpf.html#SP17">§17. To begin</a></li><li><a href="5-tpf.html#SP18">§18. Phrase option parsing</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-tpf.html#SP1">§1. Introduction</a></li><li><a href="5-tpf.html#SP3">§3. Identification</a></li><li><a href="5-tpf.html#SP5">§5. Assessment</a></li><li><a href="5-tpf.html#SP10">§10. Compilation</a></li><li><a href="5-tpf.html#SP11">§11. Access functions</a></li><li><a href="5-tpf.html#SP17">§17. To begin</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Introduction. </b>This family handles definitions of "To..." phrases: Inform's equivalent of
|
||||
function definitions. For example:
|
||||
|
@ -291,10 +291,8 @@ within rulebooks. That's a similar issue, but addressed differently elsewhere.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">body_of_defn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Routines::prepare_for_requests</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</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">XW</span><span class="plain-syntax"> = </span><a href="5-tpf.html#SP11" class="function-link"><span class="function-syntax">ToPhraseFamily::get_prototype_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ptd2.html#SP1" class="function-link"><span class="function-syntax">ParsingIDTypeData::parse</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">body_of_defn</span><span class="plain-syntax">-></span><span class="element-syntax">type_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">XW</span><span class="plain-syntax">, &</span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Options::parse_declared_options</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">body_of_defn</span><span class="plain-syntax">-></span><span class="element-syntax">options_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ptd2.html#SP1" class="function-link"><span class="function-syntax">ParsingIDTypeData::parse</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">body_of_defn</span><span class="plain-syntax">-></span><span class="element-syntax">type_data</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><a href="5-tpf.html#SP11" class="function-link"><span class="function-syntax">ToPhraseFamily::get_prototype_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">previous_id</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">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_in_logical_order</span><span class="plain-syntax">;</span>
|
||||
|
@ -581,7 +579,7 @@ own right, a functional-programming sort of device. For example:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure constant_phrase is accessed in 3/nuor, 3/dbtr, 3/rpr, 4/ass, 6/tc, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure constant_phrase is accessed in 3/nuor, 3/dbtr, 3/rpr, 4/ass, 5/po, 6/tc, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>Here we create a new named phrase ("doubling", say):
|
||||
</p>
|
||||
|
||||
|
@ -624,9 +622,8 @@ the following takes a patch-it-later approach.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cphr</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><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> < </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">cphr_kind</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">OW</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">id_type_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax"> = </span><a href="5-ptd.html#SP2" class="function-link"><span class="function-syntax">IDTypeData::new</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ptd2.html#SP1" class="function-link"><span class="function-syntax">ParsingIDTypeData::parse</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">associated_preamble_text</span><span class="plain-syntax">, &</span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ptd2.html#SP1" class="function-link"><span class="function-syntax">ParsingIDTypeData::parse</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">associated_preamble_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">cphr_kind</span><span class="plain-syntax"> = </span><a href="5-ptd.html#SP12" class="function-link"><span class="function-syntax">IDTypeData::kind</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">idtd</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">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">cphr_kind</span><span class="plain-syntax">;</span>
|
||||
|
@ -686,21 +683,8 @@ the following takes a patch-it-later approach.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">beginner</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. Phrase option parsing. </b>These indirections are provided so that the implementation of phrase options
|
||||
is confined to the current Chapter.
|
||||
</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">ToPhraseFamily::allows_options</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Options::allows_options</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="element-syntax">options_data</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">ToPhraseFamily::parse_phrase_option_used</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="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">Phrases::Options::parse</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="element-syntax">options_data</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="5-adf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresscurrent">tpf</li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-ptd.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-adf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-idf.html">idf</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresscurrent">tpf</li><li class="progresssection"><a href="5-ptd.html">ptd</a></li><li class="progresssection"><a href="5-ptd2.html">ptd2</a></li><li class="progresssection"><a href="5-po.html">po</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-ptd.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -135,7 +135,7 @@ instance has its own <span class="extract"><span class="extract-syntax">equation
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">equation_symbol</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure equation_symbol is accessed in 2/ptmn, 2/cs, 2/ps, 2/is, 3/dlr, 3/pr, 3/tr, 3/nuor, 3/uor, 3/tr2, 3/dbtr, 3/rpr, 3/nar, 3/nlpr, 3/nrr, 3/npr, 3/nvr, 3/nar2, 4/rpt, 4/tc, 4/ass, 4/npa, 4/rk, 4/ass2, 4/imp, 5/id, 5/adf, 5/tpf, 6/tc, 6/tbl, 7/tcp, 7/cu and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure equation_symbol is accessed in 2/ptmn, 2/cs, 2/ps, 2/is, 3/dlr, 3/pr, 3/tr, 3/nuor, 3/uor, 3/tr2, 3/dbtr, 3/rpr, 3/nar, 3/nlpr, 3/nrr, 3/npr, 3/nvr, 3/nar2, 4/rpt, 4/tc, 4/ass, 4/npa, 4/rk, 4/ass2, 4/imp, 5/id, 5/adf, 5/tpf, 5/po, 6/tc, 6/tbl, 7/tcp, 7/cu and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>In addition, there are some standing symbols used by all equations: the
|
||||
constant "pi", for example. They're stored in this linked list:
|
||||
</p>
|
||||
|
|
|
@ -115,7 +115,7 @@ in both tables.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">table_column</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure table_column is accessed in 3/nuor, 3/dbtr, 3/rpr, 4/ass, 5/tpf, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure table_column is accessed in 3/nuor, 3/dbtr, 3/rpr, 4/ass, 5/tpf, 5/po, 6/tbl, 6/eqt and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The predicate calculus engine often finds conditions equivalent to "if A
|
||||
is a C listed in T", and we implement this as a binary predicate — see
|
||||
<a href="7-lr.html" class="internal">Listed-In Relations</a>. There is one such relation for each column, and
|
||||
|
|
|
@ -285,6 +285,11 @@
|
|||
<spon class="sectiontitle">Parsing Type Data</span></a> -
|
||||
<span class="sectionpurpose">To parse the prototype text of a To... phrase into its type data.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-po.html">
|
||||
<spon class="sectiontitle">Phrase Options</span></a> -
|
||||
<span class="sectionpurpose">To create and subsequently parse against the list of phrase options with which the user can choose to invoke a To phrase.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-rf.html">
|
||||
<spon class="sectiontitle">Rule Family</span></a> -
|
||||
|
|
|
@ -118,8 +118,8 @@ description of an action which may have happened in the past: for example,
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_PLACEMENT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-act.html#SP6" class="function-link"><span class="function-syntax">Actions::rule_placement_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">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">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">ActionsPlugin::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">COMPILE_TEST_HEAD_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">Phrases::Context::actions_compile_test_head</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">COMPILE_TEST_TAIL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">Phrases::Context::actions_compile_test_tail</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">COMPILE_TEST_HEAD_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_head</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">COMPILE_TEST_TAIL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTRules::actions_compile_test_tail</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">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>
|
||||
<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">"asking"</span><span class="plain-syntax">), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -92,7 +92,7 @@ and a shared set of variables, so this will not be a long section of code.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">activity</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure activity is accessed in 2/rls, 2/rlb, 2/fao, 3/prcd, 3/po, 4/sv, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure activity is accessed in 2/rls, 2/rlb, 2/fao, 3/prcd, 4/sv, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Whereas rulebooks can turn values into other values, activities are more like
|
||||
void functions: they work on a value, but produce nothing.
|
||||
</p>
|
||||
|
|
|
@ -170,7 +170,7 @@ structures <a href="2-fao.html#SP3" class="internal">rulebook_outcome</a> and <a
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">named_rulebook_outcome</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure named_rulebook_outcome is accessed in 2/rls, 2/act, 3/po, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure named_rulebook_outcome is accessed in 2/rls, 2/act, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>That awkward distinction between a <a href="2-fao.html#SP3" class="internal">rulebook_outcome</a> and a <a href="2-fao.html#SP4" class="internal">named_rulebook_outcome</a>
|
||||
brings us edge cases if a rule has been written for use in one rulebook, but then
|
||||
has been explicitly listed in another, or is more than one rulebook.
|
||||
|
|
|
@ -255,7 +255,7 @@ being analogous to a function \(X\to Y\).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-fao.html#SP7" class="function-link"><span class="function-syntax">FocusAndOutcome::get_outcome_kind</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">my_outcomes</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcomes</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">Rulebooks::get_outcomes</span></span>:<br/>Focus and Outcome - <a href="2-fao.html#SP5">§5</a>, <a href="2-fao.html#SP6">§6</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP9_1">§9.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_outcomes</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">Rulebooks::get_outcomes</span></span>:<br/>Focus and Outcome - <a href="2-fao.html#SP5">§5</a>, <a href="2-fao.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-></span><span class="element-syntax">my_outcomes</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -124,7 +124,7 @@ different dynamics altogether. In short, then: rules are not phrases.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rule</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure rule is accessed in 2/rlb, 2/fao, 2/act, 3/prcd, 3/po, 4/sv, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure rule is accessed in 2/rlb, 2/fao, 2/act, 3/prcd, 4/sv, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Rules are created before their definitions can be parsed or compiled. A
|
||||
typical rule like so:
|
||||
</p>
|
||||
|
|
|
@ -228,7 +228,7 @@ significant timing difficulties.
|
|||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-act.html">❮</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-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">itp</li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresssection"><a href="3-po.html">po</a></li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="3-prcd.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-act.html">❮</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-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">itp</li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="3-prcd.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -87,7 +87,7 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">imperative</a></li><li><a href="index.html#3">Chapter 3: Phrases</a></li><li><b>Phrase Runtime Context Data</b></li></ul></div>
|
||||
<p class="purpose">To store the circumstances in which a rule phrase should fire.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-prcd.html#SP3">§3. Access</a></li><li><a href="3-prcd.html#SP7">§7. Specificity of phrase runtime contexts</a></li><li><a href="3-prcd.html#SP8">§8. Activity list on demand</a></li><li><a href="3-prcd.html#SP9">§9. Compiling the firing test</a></li><li><a href="3-prcd.html#SP9_2">§9.2. Scene test</a></li><li><a href="3-prcd.html#SP9_4">§9.4. Action test</a></li><li><a href="3-prcd.html#SP9_7">§9.7. Actor-is-player test</a></li><li><a href="3-prcd.html#SP9_9">§9.9. Activity-or-condition test</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="3-prcd.html#SP3">§3. Access</a></li><li><a href="3-prcd.html#SP7">§7. Specificity of phrase runtime contexts</a></li><li><a href="3-prcd.html#SP8">§8. Activity list on demand</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Runtime context data is the context in which a phrase is allowed to run,
|
||||
though it's only used for rules. For example,
|
||||
|
@ -393,8 +393,8 @@ all of them fail to decide, we return 0.
|
|||
<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">AL1W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">AL2W</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">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">AL1W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">AL2W</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">AL1W</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">n1</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP10" class="function-link"><span class="function-syntax">Phrases::Context::count_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd1</span><span class="plain-syntax">-></span><span class="element-syntax">avl</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">n2</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP10" class="function-link"><span class="function-syntax">Phrases::Context::count_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd2</span><span class="plain-syntax">-></span><span class="element-syntax">avl</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">n1</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP9" class="function-link"><span class="function-syntax">Phrases::Context::count_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd1</span><span class="plain-syntax">-></span><span class="element-syntax">avl</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">n2</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP9" class="function-link"><span class="function-syntax">Phrases::Context::count_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd2</span><span class="plain-syntax">-></span><span class="element-syntax">avl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n1</span><span class="plain-syntax"> > </span><span class="identifier-syntax">n2</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">n2</span><span class="plain-syntax"> > </span><span class="identifier-syntax">n1</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -452,262 +452,13 @@ process.
|
|||
<span class="plain-syntax"> </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::make_current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="4-sf.html#SP10" class="function-link"><span class="function-syntax">Frames::set_stvol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">variables_visible_in_definition</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">avl</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP14" class="function-link"><span class="function-syntax">Phrases::Context::parse_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">activity_context</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">avl</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP13" class="function-link"><span class="function-syntax">Phrases::Context::parse_avl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="element-syntax">activity_context</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">save_cs</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="SP9" class="paragraph-anchor"></a><b>§9. Compiling the firing test. </b>Each rule compiles to a routine, and this routine is called whenever the
|
||||
opportunity might exist for the rule to fire. The structure of this is
|
||||
similar to:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> [ </span><span class="identifier-syntax">Rule</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">some</span><span class="plain-syntax">-</span><span class="identifier-syntax">firing</span><span class="plain-syntax">-</span><span class="identifier-syntax">condition</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">some</span><span class="plain-syntax">-</span><span class="reserved-syntax">default</span><span class="plain-syntax">-</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> ];</span>
|
||||
</pre>
|
||||
<p class="commentary">The "test head" is the "if" line here, and the "test tail" is the "}". The
|
||||
return statement isn't necessarily reached, because even if the firing
|
||||
condition holds, the "..." code may decide to return in some other way.
|
||||
It provides only a default to cover rules which don't specify an outcome.
|
||||
</p>
|
||||
|
||||
<p class="commentary">In general the test is more elaborate than a single "if", though not very
|
||||
much.
|
||||
</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">Phrases::Context::compile_test_head</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">Phrases::Context::compile_test_head</span></span>:<br/>Compile Phrases - <a href="6-cp.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IDCompilation::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">RTRules::compile_constraint</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">) == </span><span class="identifier-syntax">TRUE</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="identifier-syntax">tests</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">PluginCalls::compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, &</span><span class="identifier-syntax">tests</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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">Compile an action test head</span><span class="named-paragraph-number">9.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">activity_context</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_9" class="named-paragraph-link"><span class="named-paragraph">Compile an activity or explicit condition test head</span><span class="named-paragraph-number">9.9</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">tests</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="element-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">compile_with_run_time_debugging</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">IF_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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEBUG_RULES_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">DB_RULE_HL</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
<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>
|
||||
<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">Phrases::Context::actions_compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tests</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Compile a scene test head</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_5" class="named-paragraph-link"><span class="named-paragraph">Compile possibly testing actor action test head</span><span class="named-paragraph-number">9.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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">always_test_actor</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Compile an actor-is-player test head</span><span class="named-paragraph-number">9.7</span></a></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">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">Phrases::Context::actions_compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IDCompilation::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_6" class="named-paragraph-link"><span class="named-paragraph">Compile an action test tail</span><span class="named-paragraph-number">9.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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">always_test_actor</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_8" class="named-paragraph-link"><span class="named-paragraph">Compile an actor-is-player test tail</span><span class="named-paragraph-number">9.8</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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Compile a scene test tail</span><span class="named-paragraph-number">9.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</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="SP9_1" class="paragraph-anchor"></a><b>§9.1. </b>This is almost the up-down reflection of the head, but note that it begins
|
||||
with the default outcome return (see above).
|
||||
</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">Phrases::Context::compile_test_tail</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">Phrases::Context::compile_test_tail</span></span>:<br/>Compile Phrases - <a href="6-cp.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IDCompilation::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">head_of_defn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rb</span><span class="plain-syntax">) </span><span class="identifier-syntax">RTRules::compile_default_outcome</span><span class="plain-syntax">(</span><a href="2-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_outcomes</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span 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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">activity_context</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_1_1" class="named-paragraph-link"><span class="named-paragraph">Compile an activity or explicit condition test tail</span><span class="named-paragraph-number">9.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">PluginCalls::compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_6" class="named-paragraph-link"><span class="named-paragraph">Compile an action test tail</span><span class="named-paragraph-number">9.6</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>§9.2. Scene test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a scene test head</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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">IFELSE_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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTScenes::emit_during_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>§9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a scene test tail</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</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="named-paragraph-container code-font"><a href="3-prcd.html#SP9_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">9.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_4" class="paragraph-anchor"></a><b>§9.4. Action test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an action test head</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><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">IFELSE_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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTActionPatterns::emit_pattern_match</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</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">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tests</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::involves_actions</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">SELF_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">NOUN_HL</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>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_5" class="paragraph-anchor"></a><b>§9.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile possibly testing actor action test head</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><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">IFELSE_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>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">never_test_actor</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTActionPatterns::emit_pattern_match</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</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">RTActionPatterns::emit_pattern_match</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-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">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::involves_actions</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">ap</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">SELF_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">NOUN_HL</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>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_6" class="paragraph-anchor"></a><b>§9.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an action test tail</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><span class="identifier-syntax">inter_ti</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="named-paragraph-container code-font"><a href="3-prcd.html#SP9_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">9.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>, <a href="3-prcd.html#SP9_1">§9.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_7" class="paragraph-anchor"></a><b>§9.7. Actor-is-player test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an actor-is-player test head</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><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">IFELSE_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>
|
||||
<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">EQ_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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTOR_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">PLAYER_HL</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_8" class="paragraph-anchor"></a><b>§9.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an actor-is-player test tail</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><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">9.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_9" class="paragraph-anchor"></a><b>§9.9. Activity-or-condition test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an activity or explicit condition test head</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">
|
||||
<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">IFELSE_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>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">avl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="element-syntax">avl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">avl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTActivities::emit_activity_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">avl</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">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_BadWhenWhile</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"I don't understand the 'when/while' clause"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which should name activities or conditions."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IXActivities::annotate_list_for_cross_references</span><span class="plain-syntax">(</span><span class="identifier-syntax">avl</span><span class="plain-syntax">, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tests</span><span class="plain-syntax">++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_1_1" class="paragraph-anchor"></a><b>§9.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an activity or explicit condition test tail</span><span class="named-paragraph-number">9.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP9_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">9.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP9_1">§9.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_3_1" class="paragraph-anchor"></a><b>§9.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a generic test fail</span><span class="named-paragraph-number">9.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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
<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">IF_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>
|
||||
<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">GT_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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEBUG_RULES_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">DB_RULE_HL</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="identifier-syntax">failure_code</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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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="3-prcd.html#SP9_3">§9.3</a>, <a href="3-prcd.html#SP9_6">§9.6</a>, <a href="3-prcd.html#SP9_8">§9.8</a>, <a href="3-prcd.html#SP9_1_1">§9.1.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </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">activity_list</span><span class="plain-syntax"> {</span>
|
||||
|
@ -718,7 +469,7 @@ with the default outcome return (see above).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> next in activity list</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">activity_list</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Context::count_avl</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">Phrases::Context::count_avl</span></span>:<br/><a href="3-prcd.html#SP7_4">§7.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">avl</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Context::count_avl</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">Phrases::Context::count_avl</span></span>:<br/><a href="3-prcd.html#SP7_4">§7.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">avl</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">n</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">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">avl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> += </span><span class="constant-syntax">10</span><span class="plain-syntax">;</span>
|
||||
|
@ -729,7 +480,7 @@ with the default outcome return (see above).
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure activity_list is accessed in 2/rlb, 2/act, 4/lv, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>Run-time contexts are seen in the "while" clauses at the end of rules.
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Run-time contexts are seen in the "while" clauses at the end of rules.
|
||||
For example:
|
||||
</p>
|
||||
|
||||
|
@ -753,12 +504,12 @@ it mentions no activities.
|
|||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><run-time-context></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</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"><activity-list-unnegated></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"> { 0, RP[1] }; </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Flip the activity list parities</span><span class="named-paragraph-number">11.2</span></a></span><span class="Preform-constant-syntax">;</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"><activity-list-unnegated></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"> { 0, RP[1] }; </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Flip the activity list parities</span><span class="named-paragraph-number">10.2</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-list-unnegated></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><activity-list-unnegated></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { lookahead }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-list-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-tail></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="named-paragraph-container code-font"><a href="3-prcd.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Join the activity lists</span><span class="named-paragraph-number">11.3</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-list-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-tail></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="named-paragraph-container code-font"><a href="3-prcd.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Join the activity lists</span><span class="named-paragraph-number">10.3</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-list-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><activity-tail></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
|
@ -766,14 +517,14 @@ it mentions no activities.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><run-time-context></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><activity-list-entry></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></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="named-paragraph-container code-font"><a href="3-prcd.html#SP11_4" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL without operand</span><span class="named-paragraph-number">11.4</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of/for</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-operand></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="named-paragraph-container code-font"><a href="3-prcd.html#SP11_5" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with operand</span><span class="named-paragraph-number">11.5</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-operand></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="named-paragraph-container code-font"><a href="3-prcd.html#SP11_5" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with operand</span><span class="named-paragraph-number">11.5</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">^<if-parsing-al-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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_6" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with unparsed text</span><span class="named-paragraph-number">11.6</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-parsing-al-conditions></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-condition></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_7" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with condition</span><span class="named-paragraph-number">11.7</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></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="named-paragraph-container code-font"><a href="3-prcd.html#SP10_4" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL without operand</span><span class="named-paragraph-number">10.4</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of/for</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-operand></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="named-paragraph-container code-font"><a href="3-prcd.html#SP10_5" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with operand</span><span class="named-paragraph-number">10.5</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-operand></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="named-paragraph-container code-font"><a href="3-prcd.html#SP10_5" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with operand</span><span class="named-paragraph-number">10.5</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">^<if-parsing-al-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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_6" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with unparsed text</span><span class="named-paragraph-number">10.6</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-parsing-al-conditions></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-condition></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_7" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL with condition</span><span class="named-paragraph-number">10.7</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="SP11_1" class="paragraph-anchor"></a><b>§11.1. </b>The optional operand handles "something" itself in productions (a) and (b)
|
||||
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b>The optional operand handles "something" itself in productions (a) and (b)
|
||||
in order to prevent it from being read as a description at production (c). This
|
||||
prevents "something" from being read as "some thing", that is, it prevents
|
||||
Inform from thinking that the operand value must have kind "thing".
|
||||
|
@ -790,7 +541,7 @@ values, of the kind to which the activity applies.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-type-expression-or-value></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, 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_2" class="paragraph-anchor"></a><b>§11.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Flip the activity list parities</span><span class="named-paragraph-number">11.2</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Flip the activity list parities</span><span class="named-paragraph-number">10.2</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -799,8 +550,8 @@ values, of the kind to which the activity applies.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">ACL_parity</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">ACL_parity</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>§11.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Join the activity lists</span><span class="named-paragraph-number">11.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>§10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Join the activity lists</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -808,17 +559,17 @@ values, of the kind to which the activity applies.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">al1</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">al2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ==> { -, </span><span class="identifier-syntax">al1</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_4" class="paragraph-anchor"></a><b>§11.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL without operand</span><span class="named-paragraph-number">11.4</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_4" class="paragraph-anchor"></a><b>§10.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL without operand</span><span class="named-paragraph-number">10.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="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">11.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">10.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">activity</span><span class="plain-syntax"> = </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="3-prcd.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_5" class="paragraph-anchor"></a><b>§11.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with operand</span><span class="named-paragraph-number">11.5</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_5" class="paragraph-anchor"></a><b>§10.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with operand</span><span class="named-paragraph-number">10.5</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -827,33 +578,33 @@ values, of the kind to which the activity applies.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">R</span><span class="plain-syntax">[2]) && (</span><span class="identifier-syntax">Dash::validate_parameter</span><span class="plain-syntax">(</span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2], </span><span class="identifier-syntax">an</span><span class="plain-syntax">-></span><span class="element-syntax">activity_on_what_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="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">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">11.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">10.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">activity</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">al</span><span class="plain-syntax">-></span><span class="element-syntax">acting_on</span><span class="plain-syntax"> = </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="3-prcd.html#SP11">§11</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_6" class="paragraph-anchor"></a><b>§11.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with unparsed text</span><span class="named-paragraph-number">11.6</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_6" class="paragraph-anchor"></a><b>§10.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with unparsed text</span><span class="named-paragraph-number">10.6</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cond</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::new_UNKNOWN</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">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">11.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">10.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">only_when</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cond</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_7" class="paragraph-anchor"></a><b>§11.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with condition</span><span class="named-paragraph-number">11.7</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_7" class="paragraph-anchor"></a><b>§10.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL with condition</span><span class="named-paragraph-number">10.7</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">cond</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dash::validate_conditional_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">cond</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">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP11_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">11.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-prcd.html#SP10_4_1" class="named-paragraph-link"><span class="named-paragraph">Make one-entry AL</span><span class="named-paragraph-number">10.4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">only_when</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cond</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_4_1" class="paragraph-anchor"></a><b>§11.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL</span><span class="named-paragraph-number">11.4.1</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_4_1" class="paragraph-anchor"></a><b>§10.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make one-entry AL</span><span class="named-paragraph-number">10.4.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -865,13 +616,13 @@ values, of the kind to which the activity applies.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax">-></span><span class="element-syntax">activity</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">al</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP11_4">§11.4</a>, <a href="3-prcd.html#SP11_5">§11.5</a>, <a href="3-prcd.html#SP11_6">§11.6</a>, <a href="3-prcd.html#SP11_7">§11.7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b></p>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-prcd.html#SP10_4">§10.4</a>, <a href="3-prcd.html#SP10_5">§10.5</a>, <a href="3-prcd.html#SP10_6">§10.6</a>, <a href="3-prcd.html#SP10_7">§10.7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </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">parsing_al_conditions</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>It's convenient not to look too closely at the condition sometimes.
|
||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>It's convenient not to look too closely at the condition sometimes.
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -881,11 +632,11 @@ values, of the kind to which the activity applies.
|
|||
<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>§14. </b>All of which sets up the context for:
|
||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>All of which sets up the context for:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Context::parse_avl</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">Phrases::Context::parse_avl</span></span>:<br/><a href="3-prcd.html#SP8">§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="reserved-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Context::parse_avl</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">Phrases::Context::parse_avl</span></span>:<br/><a href="3-prcd.html#SP8">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">save_pac</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parsing_al_conditions</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parsing_al_conditions</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="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="function-syntax"><run-time-context></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
|
@ -895,7 +646,7 @@ values, of the kind to which the activity applies.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-itp.html">❮</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-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-itp.html">itp</a></li><li class="progresscurrent">prcd</li><li class="progresssection"><a href="3-po.html">po</a></li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="3-po.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-itp.html">❮</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-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-itp.html">itp</a></li><li class="progresscurrent">prcd</li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="4-lv.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1368,7 +1368,7 @@ need in the compilation of any given routine:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-po.html">❮</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-rls.html">2</a></li><li class="progresschapter"><a href="3-itp.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">lv</li><li class="progresssection"><a href="4-sv.html">sv</a></li><li class="progresssection"><a href="4-pb.html">pb</a></li><li class="progresssection"><a href="4-sf.html">sf</a></li><li class="progresssection"><a href="4-chr.html">chr</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="4-sv.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-prcd.html">❮</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-rls.html">2</a></li><li class="progresschapter"><a href="3-itp.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">lv</li><li class="progresssection"><a href="4-sv.html">sv</a></li><li class="progresssection"><a href="4-pb.html">pb</a></li><li class="progresssection"><a href="4-sf.html">sf</a></li><li class="progresssection"><a href="4-chr.html">chr</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="4-sv.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -107,7 +107,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure stacked_variable is accessed in 2/rls, 2/fao, 2/act, 3/po, 6/cii, 6/cste and here.</li><li>The structure stacked_variable_list is accessed in 2/rlb, 2/act, 3/prcd, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li><li>The structure stacked_variable_owner is private to this section.</li><li>The structure stacked_variable_owner_list is accessed in 2/rlb, 2/act, 3/prcd, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure stacked_variable is accessed in 2/rls, 2/fao, 2/act, 6/cii, 6/cste and here.</li><li>The structure stacked_variable_list is accessed in 2/rlb, 2/act, 3/prcd, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li><li>The structure stacked_variable_owner is private to this section.</li><li>The structure stacked_variable_owner_list is accessed in 2/rlb, 2/act, 3/prcd, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -364,7 +364,7 @@ charlatans" and what they "deserve". I'm a better person now.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phod_being_parsed</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">options_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idb_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">idb</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><inline-substitution></span><span class="plain-syntax">(</span><span class="identifier-syntax">BRW</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">current_opts</span><span class="plain-syntax"> = </span><a href="6-inv.html#SP20" class="function-link"><span class="function-syntax">Invocations::get_phrase_options_bitmap</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -159,14 +159,14 @@ should always be supplied for "To..." phrases, but left null for rules.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-prcd.html#SP9" class="function-link"><span class="function-syntax">Phrases::Context::compile_test_head</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">RTRules::compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">code_at</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="6-cp.html#SP4" class="function-link"><span class="function-syntax">Routines::Compile::code_block_outer</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="3-prcd.html#SP9_1" class="function-link"><span class="function-syntax">Phrases::Context::compile_test_tail</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRules::compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-cp.html#SP2_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a terminal return statement</span><span class="named-paragraph-number">2.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -493,7 +493,7 @@ variable-argument phrases like C's <span class="extract"><span class="extract-sy
|
|||
</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">Invocations::get_phrase_options</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">Invocations::get_phrase_options</span></span>:<br/><a href="6-inv.html#SP9">§9</a><br/>Phrase Options - <a href="3-po.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::get_phrase_options</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">Invocations::get_phrase_options</span></span>:<br/><a href="6-inv.html#SP9">§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">inv</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">invocation_options</span><span class="plain-syntax"> *</span><span class="identifier-syntax">invo</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_options_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">invo</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">EMPTY_WORDING</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">invo</span><span class="plain-syntax">-></span><span class="element-syntax">options_invoked_text</span><span class="plain-syntax">;</span>
|
||||
|
@ -510,7 +510,7 @@ When no options are set, the bitmap is always 0.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">invo</span><span class="plain-syntax">-></span><span class="element-syntax">options</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">Invocations::set_phrase_options_bitmap</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">Invocations::set_phrase_options_bitmap</span></span>:<br/>Phrase Options - <a href="3-po.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">further_bits</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::set_phrase_options_bitmap</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">further_bits</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">further_bits</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">invocation_options</span><span class="plain-syntax"> *</span><span class="identifier-syntax">invo</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_options_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">invo</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
|
@ -526,7 +526,7 @@ When no options are set, the bitmap is always 0.
|
|||
</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">Invocations::implies_newline</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">Invocations::implies_newline</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP3_2">§3.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">inv</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::implies_newline</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">Invocations::implies_newline</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP3_2">§3.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">inv</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">IDTypeData::is_a_say_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</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">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="constant-syntax">IMPLY_NEWLINES_IN_SAY_CMODE</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>
|
||||
|
@ -548,7 +548,7 @@ When no options are set, the bitmap is always 0.
|
|||
</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">Invocations::length_of_list</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">Invocations::length_of_list</span></span>:<br/><a href="6-inv.html#SP25">§25</a>, <a href="6-inv.html#SP29">§29</a>, <a href="6-inv.html#SP30">§30</a><br/>Compile Invocations - <a href="6-ci.html#SP2">§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">invl</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::length_of_list</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">Invocations::length_of_list</span></span>:<br/><a href="6-inv.html#SP25">§25</a>, <a href="6-inv.html#SP29">§29</a>, <a href="6-inv.html#SP30">§30</a><br/>Compile Invocations - <a href="6-ci.html#SP2">§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">invl</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">L</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</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">invl</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_alternative</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||
|
@ -558,7 +558,7 @@ When no options are set, the bitmap is always 0.
|
|||
</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">Invocations::first_in_list</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">Invocations::first_in_list</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP2">§2</a>, <a href="6-ci.html#SP2_1_1_1">§2.1.1.1</a>, <a href="6-ci.html#SP2_2">§2.2</a>, <a href="6-ci.html#SP2_2_3_1_1">§2.2.3.1.1</a><br/>Compile Phrases - <a href="6-cp.html#SP4_2_1">§4.2.1</a>, <a href="6-cp.html#SP5">§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">invl</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Invocations::first_in_list</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">Invocations::first_in_list</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP2">§2</a>, <a href="6-ci.html#SP2_1_1_1">§2.1.1.1</a>, <a href="6-ci.html#SP2_2">§2.2</a>, <a href="6-ci.html#SP2_2_3_1_1">§2.2.3.1.1</a><br/>Compile Phrases - <a href="6-cp.html#SP4_2_1">§4.2.1</a>, <a href="6-cp.html#SP5">§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">invl</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">invl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -635,7 +635,7 @@ instability of the sorting algorithm does not produce any ambiguity in how
|
|||
Inform prioritises phrases.
|
||||
</li></ul>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::comparison</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">Invocations::comparison</span></span>:<br/><a href="6-inv.html#SP25">§25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i2</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::comparison</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">Invocations::comparison</span></span>:<br/><a href="6-inv.html#SP25">§25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i2</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">invocation_sort_block</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv1</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">invocation_sort_block</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">i1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">invocation_sort_block</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv2</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">invocation_sort_block</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">i2</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -686,7 +686,7 @@ in a list:
|
|||
</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">Invocations::log_list</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">Invocations::log_list</span></span>:<br/>Imperative Module - <a href="1-im.html#SP2">§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">invl</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::log_list</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">Invocations::log_list</span></span>:<br/>Imperative Module - <a href="1-im.html#SP2">§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">invl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Invocation list (%d):\n"</span><span class="plain-syntax">, </span><a href="6-inv.html#SP23" class="function-link"><span class="function-syntax">Invocations::length_of_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">invl</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">n</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -136,11 +136,6 @@
|
|||
<spon class="sectiontitle">Phrase Runtime Context Data</span></a> -
|
||||
<span class="sectionpurpose">To store the circumstances in which a rule phrase should fire.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-po.html">
|
||||
<spon class="sectiontitle">Phrase Options</span></a> -
|
||||
<span class="sectionpurpose">To create and subsequently parse against the list of phrase options with which the user can choose to invoke a To phrase.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -377,7 +377,7 @@ This is the routine which prints those details.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pi.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Present a paste button containing the text of the phrase</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pi.html#SP4" class="function-link"><span class="function-syntax">Phrases::Index::index_type_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pi.html#SP6" class="function-link"><span class="function-syntax">Phrases::Index::index_phrase_options</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_data</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pi.html#SP6" class="function-link"><span class="function-syntax">Phrases::Index::index_phrase_options</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">options_data</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pi.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Quote from and reference to the documentation, where possible</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="2-pi.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Present the equation form of the phrase, if it has one</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="2-pi.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Present the name of the phrase regarded as a value, if it has one</span><span class="named-paragraph-number">5.4</span></a></span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -438,7 +438,7 @@ though it can be any type of phrase.
|
|||
<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">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ToPhraseFamily::meaning_as_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ToPhraseFamily::allows_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PhraseOptions::allows_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</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">EXCERPT_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Looking for phrase options\n"</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">bl</span><span class="plain-syntax">=0, </span><span class="identifier-syntax">scan_pos</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">)+1;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">scan_pos</span><span class="plain-syntax"><</span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">); </span><span class="identifier-syntax">scan_pos</span><span class="plain-syntax">++) {</span>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -12,6 +12,14 @@
|
|||
<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>
|
||||
|
@ -99,7 +107,7 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">av</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">av_iname</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">RTActivities::emit_activity_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActivities::emit_activity_list</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">RTActivities::emit_activity_list</span></span>:<br/>Rules - <a href="4-rls.html#SP15_9">§15.9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">al</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">negate_me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">downs</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">al</span><span class="plain-syntax">-></span><span class="identifier-syntax">ACL_parity</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">negate_me</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">negate_me</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NOT_BIP</span><span class="plain-syntax">); </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()); </span><span class="identifier-syntax">downs</span><span class="plain-syntax">++; }</span>
|
||||
|
|
|
@ -133,9 +133,10 @@ code below.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IDCompilation::prepare_stack_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-icd.html#SP5" class="function-link"><span class="function-syntax">IDCompilation::initialise_stack_frame_from_type_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">), &(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><a href="4-icd.html#SP5" class="function-link"><span class="function-syntax">IDCompilation::initialise_stack_frame_from_type_data</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> &(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">), &(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IDTypeData::kind</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">type_data</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">Phrases::Options::allows_options</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">options_data</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PhraseOptions::allows_options</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LocalVariables::options_parameter_is_needed</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">body</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -242,7 +243,7 @@ variables "new entry" and "L" with those kinds.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">inter_back</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">IDCompilation::iname</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">IDCompilation::iname</span></span>:<br/>Adjectives by Phrase - <a href="3-abp.html#SP1">§1</a><br/>Rules - <a href="4-rls.html#SP2">§2</a><br/>Timed Rules - <a href="5-tr.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">IDCompilation::iname</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">IDCompilation::iname</span></span>:<br/>Adjectives by Phrase - <a href="3-abp.html#SP1">§1</a><br/>Rules - <a href="4-rls.html#SP2">§2</a>, <a href="4-rls.html#SP15">§15</a>, <a href="4-rls.html#SP15_1">§15.1</a><br/>Timed Rules - <a href="5-tr.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">ph_iname</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">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">owning_module</span><span class="plain-syntax">, </span><span class="constant-syntax">ADJECTIVE_PHRASES_HAP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">ph_iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DEFINITION_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PR</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -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">runtime</a></li><li><a href="index.html#4">Chapter 4: Compilation Utilities</a></li><li><b>Rules</b></li></ul></div>
|
||||
<p class="purpose">To compile run-time support for rules.</p>
|
||||
|
||||
<ul class="toc"><li><a href="4-rls.html#SP3">§3. Compilation</a></li><li><a href="4-rls.html#SP5">§5. Printing rule names at run time</a></li><li><a href="4-rls.html#SP7">§7. Compilation of I6-format rulebook</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-rls.html#SP3">§3. Compilation</a></li><li><a href="4-rls.html#SP5">§5. Printing rule names at run time</a></li><li><a href="4-rls.html#SP7">§7. Compilation of I6-format rulebook</a></li><li><a href="4-rls.html#SP15">§15. Compiling the firing test</a></li><li><a href="4-rls.html#SP15_2">§15.2. Scene test</a></li><li><a href="4-rls.html#SP15_4">§15.4. Action test</a></li><li><a href="4-rls.html#SP15_7">§15.7. Actor-is-player test</a></li><li><a href="4-rls.html#SP15_9">§15.9. Activity-or-condition test</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
||||
|
||||
|
@ -215,7 +215,7 @@ conditions have not been met.
|
|||
</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">RTRules::compile_constraint</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">RTRules::compile_constraint</span></span>:<br/><a href="4-rls.html#SP3_1">§3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">RTRules::compile_constraint</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">RTRules::compile_constraint</span></span>:<br/><a href="4-rls.html#SP3_1">§3.1</a>, <a href="4-rls.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">applicability_constraint</span><span class="plain-syntax"> *</span><span class="identifier-syntax">acl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">acl</span><span class="plain-syntax">, </span><span class="identifier-syntax">applicability_constraint</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="identifier-syntax">applicability_constraints</span><span class="plain-syntax">) {</span>
|
||||
|
@ -965,7 +965,7 @@ code are the real outcome of the code in this section.
|
|||
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTRules::compile_default_outcome</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">outs</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTRules::compile_default_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">RTRules::compile_default_outcome</span></span>:<br/><a href="4-rls.html#SP15_1">§15.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">outcomes</span><span class="plain-syntax"> *</span><span class="identifier-syntax">outs</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">rtrue</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">rulebook_outcome</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rbo</span><span class="plain-syntax"> = </span><span class="identifier-syntax">outs</span><span class="plain-syntax">-></span><span class="identifier-syntax">default_named_outcome</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rbo</span><span class="plain-syntax">) {</span>
|
||||
|
@ -1101,6 +1101,251 @@ code are the real outcome of the code in this section.
|
|||
<span class="plain-syntax"> </span><a href="4-rtn.html#SP5" class="function-link"><span class="function-syntax">Routines::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. Compiling the firing test. </b>Each rule compiles to a routine, and this routine is called whenever the
|
||||
opportunity might exist for the rule to fire. The structure of this is
|
||||
similar to:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> [ </span><span class="identifier-syntax">Rule</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">some</span><span class="plain-syntax">-</span><span class="identifier-syntax">firing</span><span class="plain-syntax">-</span><span class="identifier-syntax">condition</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">some</span><span class="plain-syntax">-</span><span class="reserved-syntax">default</span><span class="plain-syntax">-</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> ];</span>
|
||||
</pre>
|
||||
<p class="commentary">The "test head" is the "if" line here, and the "test tail" is the "}". The
|
||||
return statement isn't necessarily reached, because even if the firing
|
||||
condition holds, the "..." code may decide to return in some other way.
|
||||
It provides only a default to cover rules which don't specify an outcome.
|
||||
</p>
|
||||
|
||||
<p class="commentary">In general the test is more elaborate than a single "if", though not very
|
||||
much.
|
||||
</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">RTRules::compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="4-icd.html#SP6" class="function-link"><span class="function-syntax">IDCompilation::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</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-rls.html#SP4" class="function-link"><span class="function-syntax">RTRules::compile_constraint</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">) == </span><span class="identifier-syntax">TRUE</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="identifier-syntax">tests</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">PluginCalls::compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, &</span><span class="identifier-syntax">tests</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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_4" class="named-paragraph-link"><span class="named-paragraph">Compile an action test head</span><span class="named-paragraph-number">15.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">activity_context</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_9" class="named-paragraph-link"><span class="named-paragraph">Compile an activity or explicit condition test head</span><span class="named-paragraph-number">15.9</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">tests</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">compile_with_run_time_debugging</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DEBUG_RULES_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DB_RULE_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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">int</span><span class="plain-syntax"> </span><span class="function-syntax">RTRules::actions_compile_test_head</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tests</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">during_scene</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Compile a scene test head</span><span class="named-paragraph-number">15.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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_5" class="named-paragraph-link"><span class="named-paragraph">Compile possibly testing actor action test head</span><span class="named-paragraph-number">15.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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">always_test_actor</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_7" class="named-paragraph-link"><span class="named-paragraph">Compile an actor-is-player test head</span><span class="named-paragraph-number">15.7</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">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">RTRules::actions_compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="4-icd.html#SP6" class="function-link"><span class="function-syntax">IDCompilation::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_6" class="named-paragraph-link"><span class="named-paragraph">Compile an action test tail</span><span class="named-paragraph-number">15.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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">always_test_actor</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_8" class="named-paragraph-link"><span class="named-paragraph">Compile an actor-is-player test tail</span><span class="named-paragraph-number">15.8</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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">during_scene</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_3" class="named-paragraph-link"><span class="named-paragraph">Compile a scene test tail</span><span class="named-paragraph-number">15.3</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">TRUE</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>§15.1. </b>This is almost the up-down reflection of the head, but note that it begins
|
||||
with the default outcome return (see above).
|
||||
</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">RTRules::compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="4-icd.html#SP6" class="function-link"><span class="function-syntax">IDCompilation::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">head_of_defn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rb</span><span class="plain-syntax">) </span><a href="4-rls.html#SP14" class="function-link"><span class="function-syntax">RTRules::compile_default_outcome</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Rulebooks::get_outcomes</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span 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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">activity_context</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_1_1" class="named-paragraph-link"><span class="named-paragraph">Compile an activity or explicit condition test tail</span><span class="named-paragraph-number">15.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">PluginCalls::compile_test_tail</span><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_6" class="named-paragraph-link"><span class="named-paragraph">Compile an action test tail</span><span class="named-paragraph-number">15.6</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15_2" class="paragraph-anchor"></a><b>§15.2. Scene test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a scene test head</span><span class="named-paragraph-number">15.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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IFELSE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><a href="5-scn.html#SP7" class="function-link"><span class="function-syntax">RTScenes::emit_during_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">during_scene</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_3" class="paragraph-anchor"></a><b>§15.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a scene test tail</span><span class="named-paragraph-number">15.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</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="named-paragraph-container code-font"><a href="4-rls.html#SP15_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">15.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_4" class="paragraph-anchor"></a><b>§15.4. Action test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an action test head</span><span class="named-paragraph-number">15.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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IFELSE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ap.html#SP5" class="function-link"><span class="function-syntax">RTActionPatterns::emit_pattern_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</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">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tests</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::involves_actions</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SELF_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NOUN_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_5" class="paragraph-anchor"></a><b>§15.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile possibly testing actor action test head</span><span class="named-paragraph-number">15.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="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IFELSE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">never_test_actor</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ap.html#SP5" class="function-link"><span class="function-syntax">RTActionPatterns::emit_pattern_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</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><a href="5-ap.html#SP5" class="function-link"><span class="function-syntax">RTActionPatterns::emit_pattern_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</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">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::involves_actions</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SELF_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NOUN_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_6" class="paragraph-anchor"></a><b>§15.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an action test tail</span><span class="named-paragraph-number">15.6</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</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="named-paragraph-container code-font"><a href="4-rls.html#SP15_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">15.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>, <a href="4-rls.html#SP15_1">§15.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_7" class="paragraph-anchor"></a><b>§15.7. Actor-is-player test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an actor-is-player test head</span><span class="named-paragraph-number">15.7</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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IFELSE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ACTOR_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PLAYER_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
||||
<span class="plain-syntax"> (*</span><span class="identifier-syntax">tests</span><span class="plain-syntax">)++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_8" class="paragraph-anchor"></a><b>§15.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an actor-is-player test tail</span><span class="named-paragraph-number">15.8</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">15.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_9" class="paragraph-anchor"></a><b>§15.9. Activity-or-condition test. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an activity or explicit condition test head</span><span class="named-paragraph-number">15.9</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">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IFELSE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">activity_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">avl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">avl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">avl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-act.html#SP2" class="function-link"><span class="function-syntax">RTActivities::emit_activity_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">avl</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">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_BadWhenWhile</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"I don't understand the 'when/while' clause"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"which should name activities or conditions."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IXActivities::annotate_list_for_cross_references</span><span class="plain-syntax">(</span><span class="identifier-syntax">avl</span><span class="plain-syntax">, </span><span class="identifier-syntax">idb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tests</span><span class="plain-syntax">++;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_1_1" class="paragraph-anchor"></a><b>§15.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile an activity or explicit condition test tail</span><span class="named-paragraph-number">15.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rls.html#SP15_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a generic test fail</span><span class="named-paragraph-number">15.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15_1">§15.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_3_1" class="paragraph-anchor"></a><b>§15.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a generic test fail</span><span class="named-paragraph-number">15.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">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">GT_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DEBUG_RULES_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DB_RULE_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-rls.html#SP15_3">§15.3</a>, <a href="4-rls.html#SP15_6">§15.6</a>, <a href="4-rls.html#SP15_8">§15.8</a>, <a href="4-rls.html#SP15_1_1">§15.1.1</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-rtn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-rm.html">1</a></li><li class="progresschapter"><a href="2-hrr.html">2</a></li><li class="progresschapter"><a href="3-ad.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-fc.html">fc</a></li><li class="progresssection"><a href="4-i6i.html">i6i</a></li><li class="progresssection"><a href="4-lt.html">lt</a></li><li class="progresssection"><a href="4-jl.html">jl</a></li><li class="progresssection"><a href="4-tl.html">tl</a></li><li class="progresssection"><a href="4-ts.html">ts</a></li><li class="progresssection"><a href="4-rsp.html">rsp</a></li><li class="progresssection"><a href="4-ct.html">ct</a></li><li class="progresssection"><a href="4-cl.html">cl</a></li><li class="progresssection"><a href="4-rtn.html">rtn</a></li><li class="progresscurrent">rls</li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-es.html">es</a></li><li class="progresssection"><a href="4-iti.html">iti</a></li><li class="progresssection"><a href="4-ts2.html">ts2</a></li><li class="progresssection"><a href="4-itc.html">itc</a></li><li class="progresssection"><a href="4-uoart.html">uoart</a></li><li class="progresssection"><a href="4-tv.html">tv</a></li><li class="progresssection"><a href="4-vrb.html">vrb</a></li><li class="progresssection"><a href="4-prp.html">prp</a></li><li class="progresssection"><a href="4-msr.html">msr</a></li><li class="progresssection"><a href="4-epv.html">epv</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progresssection"><a href="4-ic.html">ic</a></li><li class="progresssection"><a href="4-adj.html">adj</a></li><li class="progresssection"><a href="4-rsfk.html">rsfk</a></li><li class="progresssection"><a href="4-efart.html">efart</a></li><li class="progresssection"><a href="4-ni.html">ni</a></li><li class="progresssection"><a href="4-vart.html">vart</a></li><li class="progresssection"><a href="4-rart.html">rart</a></li><li class="progresssection"><a href="4-lpart.html">lpart</a></li><li class="progresssection"><a href="4-rsft.html">rsft</a></li><li class="progresssection"><a href="4-icd.html">icd</a></li><li class="progresssection"><a href="4-pr.html">pr</a></li><li class="progresssection"><a href="4-cls.html">cls</a></li><li class="progresschapter"><a href="5-nmn.html">5</a></li><li class="progressnext"><a href="4-act.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -380,7 +380,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
|
|||
<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>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActionPatterns::emit_pattern_match</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">RTActionPatterns::emit_pattern_match</span></span>:<br/>Named Action Patterns - <a href="5-nap.html#SP1">§1</a></span></button><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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActionPatterns::emit_pattern_match</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">RTActionPatterns::emit_pattern_match</span></span>:<br/>Rules - <a href="4-rls.html#SP15_4">§15.4</a>, <a href="4-rls.html#SP15_5">§15.5</a><br/>Named Action Patterns - <a href="5-nap.html#SP1">§1</a></span></button><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="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">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-ap.html#SP6" class="function-link"><span class="function-syntax">RTActionPatterns::compile_pattern_match</span></a><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">naming_mode</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -739,7 +739,7 @@ actually running:
|
|||
</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">RTScenes::emit_during_clause</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">RTScenes::emit_during_clause</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">RTScenes::emit_during_clause</span></span>:<br/>Rules - <a href="4-rls.html#SP15_2">§15.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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stuck</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_scene</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_rvalue</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
|
||||
|
|
|
@ -2129,7 +2129,7 @@ options are properly used.
|
|||
<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">"(4I.f)"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">outcome</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Node::get_phrase_options_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cso</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Options::parse_invoked_options</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">cso</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PhraseOptions::parse_invoked_options</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inv</span><span class="plain-syntax">, (</span><span class="identifier-syntax">TEST_DASH_MODE</span><span class="plain-syntax">(</span><span class="constant-syntax">ISSUE_PROBLEMS_DMODE</span><span class="plain-syntax">))?</span><span class="identifier-syntax">FALSE: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">cso</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">outcome</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -249,7 +249,7 @@ being compiled; all others are out of scope.
|
|||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><s-phrase-option-in-use></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">id_body_being_compiled</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">i</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">ToPhraseFamily::parse_phrase_option_used</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">id_body_being_compiled</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">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">PhraseOptions::parse</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">id_body_being_compiled</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">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">i</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><a href="2-cnd.html#SP9" class="function-link"><span class="Preform-function-syntax">Conditions::new_TEST_PHRASE_OPTION</span></a><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">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,9 +3,9 @@
|
|||
(@1)<cardinal-number>=1
|
||||
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
|
||||
(@1)minus (@2)<cardinal-number>=1
|
||||
(hits 0/1916) constraint DS = {12} extremes [2, 2]
|
||||
(hits 0/1925) constraint DS = {12} extremes [2, 2]
|
||||
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
|
||||
(hits 273/783) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
|
||||
(hits 273/839) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
|
||||
(@1)<quoted-text>=1
|
||||
(hits 1564/5543) (matched: 'Represents geographical locations, both indoor
|
||||
and outdoor, which are not necessarily areas in a building. A player in one
|
||||
|
@ -14,12 +14,12 @@
|
|||
<s-literal-real-number>=1
|
||||
(hits 11/9911) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
|
||||
(@1)<s-literal-truth-state>=1
|
||||
(hits 78/819) (matched: 'false') constraint CS = {6} extremes [1, 1]
|
||||
(hits 78/818) (matched: 'false') constraint CS = {6} extremes [1, 1]
|
||||
<s-literal-list>=1
|
||||
(hits 0/1989) constraint DS = {8} extremes [2, infinity)
|
||||
(hits 0/3237) constraint DS = {8} extremes [2, infinity)
|
||||
(@1)unicode <s-unicode-character>=1
|
||||
(hits 0/4219) constraint DS = {12} extremes [2, infinity)
|
||||
(hits 0/4282) constraint DS = {12} extremes [2, infinity)
|
||||
<s-literal-time>=1
|
||||
(hits 0/3785) constraint DW = {9, 10, 11} extremes [2, 5]
|
||||
(hits 0/3836) constraint DW = {9, 10, 11} extremes [2, 5]
|
||||
<s-literal-unit-notation>=1
|
||||
(hits 0/9822) constraint (none) extremes [1, infinity)
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
100.0% in inform7 run
|
||||
66.3% in compilation to Inter
|
||||
25.4% in //ImperativeDefinitions::compile_first_block//
|
||||
8.9% in //PhraseRequests::compile_as_needed//
|
||||
6.7% in //Strings::compile_responses//
|
||||
6.0% in //InferenceSubjects::emit_all//
|
||||
4.2% in //MajorNodes::pre_pass//
|
||||
3.2% in //MajorNodes::pass_1//
|
||||
2.0% in //RTRules::RulePrintingRule_routine//
|
||||
1.8% in //RTRules::rulebooks_array_array//
|
||||
1.6% in //ImperativeDefinitions::assess_all//
|
||||
0.9% in //RTVerbs::ConjugateVerb//
|
||||
67.0% in compilation to Inter
|
||||
25.3% in //ImperativeDefinitions::compile_first_block//
|
||||
8.5% in //PhraseRequests::compile_as_needed//
|
||||
7.1% in //Strings::compile_responses//
|
||||
6.1% in //InferenceSubjects::emit_all//
|
||||
4.3% in //MajorNodes::pre_pass//
|
||||
3.5% in //MajorNodes::pass_1//
|
||||
2.1% in //RTRules::RulePrintingRule_routine//
|
||||
1.9% in //RTRules::rulebooks_array_array//
|
||||
1.5% in //ImperativeDefinitions::assess_all//
|
||||
1.0% in //RTVerbs::ConjugateVerb//
|
||||
0.5% in //RTRules::compile_rulebooks//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //MajorNodes::pass_2//
|
||||
0.3% in //RTRelations::compile_defined_relations//
|
||||
0.3% in //RTRules::compile_rulebooks//
|
||||
0.1% in //RTCommandGrammars::compile_all//
|
||||
0.1% in //RTKinds::compile_data_type_support_routines//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
3.3% not specifically accounted for
|
||||
31.2% in running Inter pipeline
|
||||
9.8% in step preparation
|
||||
9.6% in inter step 2/12: link
|
||||
7.3% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.1% in //World::stages_II_and_III//
|
||||
2.8% not specifically accounted for
|
||||
30.8% in running Inter pipeline
|
||||
10.1% in step preparation
|
||||
9.8% in inter step 2/12: link
|
||||
7.1% 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
|
||||
|
@ -29,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.7% not specifically accounted for
|
||||
2.0% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
2.1% not specifically accounted for
|
||||
1.9% in supervisor
|
||||
0.2% not specifically accounted for
|
||||
|
|
|
@ -167,7 +167,6 @@ Inform 7 source text written underneath the heading.
|
|||
typedef struct id_body {
|
||||
struct imperative_defn *head_of_defn;
|
||||
struct id_type_data type_data;
|
||||
struct id_options_data options_data;
|
||||
struct id_runtime_context_data runtime_context_data;
|
||||
struct id_compilation_data compilation_data;
|
||||
CLASS_DEFINITION
|
||||
|
@ -177,7 +176,6 @@ id_body *ImperativeDefinitions::new_body(imperative_defn *id) {
|
|||
LOGIF(PHRASE_CREATIONS, "Creating body: <%W>\n", id->log_text);
|
||||
id_body *body = CREATE(id_body);
|
||||
body->head_of_defn = id;
|
||||
body->options_data = Phrases::Options::new(EMPTY_WORDING);
|
||||
body->runtime_context_data = Phrases::Context::new();
|
||||
body->type_data = IDTypeData::new();
|
||||
body->compilation_data = IDCompilation::new_data(id->at);
|
||||
|
|
|
@ -19,7 +19,7 @@ back. The IDTD we write to is factory-fresh except that it has already been
|
|||
adjusted for an inline definition (if that's the kind of definition this is).
|
||||
|
||||
=
|
||||
void ParsingIDTypeData::parse(id_type_data *idtd, wording XW, wording *OW) {
|
||||
void ParsingIDTypeData::parse(id_type_data *idtd, wording XW) {
|
||||
int say_flag = FALSE; /* is this going to be a "say" phrase? */
|
||||
|
||||
if (Wordings::nonempty(XW))
|
||||
|
@ -29,6 +29,7 @@ void ParsingIDTypeData::parse(id_type_data *idtd, wording XW, wording *OW) {
|
|||
if (Wordings::nonempty(XW))
|
||||
XW = ParsingIDTypeData::phtd_parse_doodads(idtd, XW, &say_flag); /* and doodads from the back */
|
||||
|
||||
wording OW = EMPTY_WORDING; /* the options wording */
|
||||
int cw = -1; /* word number of first comma */
|
||||
@<Find the first comma outside of parentheses, if any exists@>;
|
||||
if (cw >= 0) {
|
||||
|
@ -36,12 +37,13 @@ void ParsingIDTypeData::parse(id_type_data *idtd, wording XW, wording *OW) {
|
|||
@<Does this comma presage phrase options?@>;
|
||||
if (comma_presages_options) {
|
||||
if (say_flag) @<Issue a problem: say phrases aren't allowed options@>;
|
||||
*OW = Wordings::from(XW, cw + 1);
|
||||
OW = Wordings::from(XW, cw + 1);
|
||||
XW = Wordings::up_to(XW, cw - 1); /* trim the preamble range to to the text before the comma */
|
||||
}
|
||||
}
|
||||
idtd->registration_text = XW;
|
||||
ParsingIDTypeData::phtd_main_prototype(idtd);
|
||||
PhraseOptions::parse_declared_options(&(idtd->options_data), OW);
|
||||
}
|
||||
|
||||
@<Find the first comma outside of parentheses, if any exists@> =
|
||||
|
|
|
@ -1,83 +1,18 @@
|
|||
[Phrases::Options::] Phrase Options.
|
||||
[PhraseOptions::] Phrase Options.
|
||||
|
||||
To create and subsequently parse against the list of phrase options
|
||||
with which the user can choose to invoke a To phrase.
|
||||
|
||||
@ A "phrase option" is a sort of modifier tacked on to the instruction to
|
||||
do something, changing how it works but not enough to merit an entirely new
|
||||
phrase. It's like an argument passed to a routine which specifies optional
|
||||
behaviour, and indeed that will be how it is compiled.
|
||||
@h Introduction.
|
||||
A "phrase option" is a sort of modifier tacked on to an invocation of a
|
||||
phrase; the only modifiers allowed are those declared in that phrase's
|
||||
preamble. Phrase pptions are an early feature of Inform 7 going back to a
|
||||
time when its priority was to enable the paraphrasing of Inform 6 library
|
||||
features (such as the bitmap passed as a parameter to the list-printer).
|
||||
|
||||
Like the token names, phrase option names have local scope (which is why
|
||||
they are here and not in the excerpts database). Unlike them, they are not
|
||||
valid as values, since a condition is not also a value in Inform 7.
|
||||
|
||||
The packet of these associated with a phrase is stored in the PHOD structure.
|
||||
|
||||
@d MAX_OPTIONS_PER_PHRASE 16 /* because held in a 16-bit Z-machine bitmap */
|
||||
|
||||
=
|
||||
typedef struct id_options_data {
|
||||
struct phrase_option *options_permitted[MAX_OPTIONS_PER_PHRASE]; /* see below */
|
||||
int no_options_permitted;
|
||||
struct wording options_declaration; /* the text declaring the whole set of options */
|
||||
int multiple_options_permitted; /* can be combined, or mutually exclusive? */
|
||||
} id_options_data;
|
||||
|
||||
@ There's nothing to a phrase option, really:
|
||||
|
||||
=
|
||||
typedef struct phrase_option {
|
||||
struct wording name; /* text of name */
|
||||
} phrase_option;
|
||||
|
||||
@h Creation.
|
||||
By default, a phrase has no options.
|
||||
|
||||
=
|
||||
id_options_data Phrases::Options::new(wording W) {
|
||||
id_options_data phod;
|
||||
phod.no_options_permitted = 0;
|
||||
phod.multiple_options_permitted = FALSE;
|
||||
phod.options_declaration = W;
|
||||
return phod;
|
||||
}
|
||||
|
||||
int Phrases::Options::allows_options(id_options_data *phod) {
|
||||
if (phod->no_options_permitted > 0) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@h Parsing.
|
||||
This isn't very efficient, but doesn't need to be, since phrase options
|
||||
are parsed only in a condition context, not in a value context, and
|
||||
these are relatively rare in Inform source text.
|
||||
|
||||
=
|
||||
int Phrases::Options::parse(id_options_data *phod, wording W) {
|
||||
for (int i = 0; i < phod->no_options_permitted; i++)
|
||||
if (Wordings::match(W, phod->options_permitted[i]->name))
|
||||
return (1 << i);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@h Parsing phrase options in a declaration.
|
||||
|
||||
=
|
||||
id_options_data *phod_being_parsed = NULL;
|
||||
id_body *idb_being_parsed = NULL;
|
||||
|
||||
void Phrases::Options::parse_declared_options(id_options_data *phod, wording W) {
|
||||
if (Wordings::nonempty(W)) {
|
||||
phod->options_declaration = W;
|
||||
phod_being_parsed = phod;
|
||||
<phrase-option-declaration-list>(W);
|
||||
if (<<r>>) phod->multiple_options_permitted = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ I have to say that I regret the syntax for phrase options, which makes
|
||||
us write commas like the one here:
|
||||
I now sligjtly regret the existence of phrase options, but above all the
|
||||
comma-based syntax used for them, as here. Brackets would have been better;
|
||||
it makes phrase options impossible to use for text substitutions.
|
||||
|
||||
>> let R be the best route from X to Y, using doors;
|
||||
|
||||
|
@ -86,60 +21,138 @@ admitted that they are a clean way to interface to low-level Inform 6 code.
|
|||
But it's mostly the comma which annoys me (making text substitutions unable
|
||||
to support phrase options); I should have gone for brackets.
|
||||
|
||||
The syntax for declaring phrase options is uncontroversial -- it's just
|
||||
a list of names -- but there are wrinkles: if the list is divided with "or"
|
||||
then the options are mutually exclusive, but with "and/or" they're not.
|
||||
For example, in:
|
||||
The //id_options_data// for an imperative definition, which is part of its
|
||||
type data, says what options it allows:
|
||||
|
||||
>> To decide which object is best route from (R1 - object) to (R2 - object), using doors or using even locked doors: ...
|
||||
|
||||
the following parses this list:
|
||||
|
||||
>> using doors or using even locked doors
|
||||
|
||||
and creates two options with <phrase-option-declaration-setting-entry>.
|
||||
@d MAX_OPTIONS_PER_PHRASE 16 /* because held in a 16-bit Z-machine bitmap */
|
||||
|
||||
=
|
||||
<phrase-option-declaration-list> ::=
|
||||
... | ==> { lookahead }
|
||||
<phrase-option-declaration-setting-entry> <phrase-option-declaration-tail> | ==> { pass 2 }
|
||||
<phrase-option-declaration-setting-entry> ==> { FALSE, - }
|
||||
typedef struct id_options_data {
|
||||
struct phrase_option *options_permitted[MAX_OPTIONS_PER_PHRASE];
|
||||
int no_options_permitted;
|
||||
struct wording options_declaration; /* the text declaring the whole set of options */
|
||||
int multiple_options_permitted; /* can be combined, or mutually exclusive? */
|
||||
} id_options_data;
|
||||
|
||||
<phrase-option-declaration-tail> ::=
|
||||
, _or <phrase-option-declaration-list> | ==> { pass 1 }
|
||||
, \and/or <phrase-option-declaration-list> | ==> { TRUE, - }
|
||||
_,/or <phrase-option-declaration-list> | ==> { pass 1 }
|
||||
\and/or <phrase-option-declaration-list> ==> { TRUE, - }
|
||||
typedef struct phrase_option {
|
||||
struct wording name; /* text of name */
|
||||
} phrase_option;
|
||||
|
||||
<phrase-option-declaration-setting-entry> ::=
|
||||
... | ==> { lookahead }
|
||||
... ==> @<Add a phrase option@>;
|
||||
|
||||
@<Add a phrase option@> =
|
||||
Phrases::Options::phod_add_phrase_option(phod_being_parsed, W);
|
||||
==> { FALSE, - };
|
||||
@h Creation.
|
||||
By default, a phrase has no options.
|
||||
|
||||
=
|
||||
id_options_data PhraseOptions::new(wording W) {
|
||||
id_options_data phod;
|
||||
phod.no_options_permitted = 0;
|
||||
phod.multiple_options_permitted = FALSE;
|
||||
phod.options_declaration = W;
|
||||
return phod;
|
||||
}
|
||||
|
||||
int PhraseOptions::allows_options(id_body *idb) {
|
||||
id_options_data *phod = &(idb->type_data.options_data);
|
||||
if (phod->no_options_permitted > 0) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ =
|
||||
int too_many_POs_error = FALSE;
|
||||
void Phrases::Options::phod_add_phrase_option(id_options_data *phod, wording W) {
|
||||
int PM_TooManyPhraseOptions_issued = FALSE;
|
||||
void PhraseOptions::phod_add_phrase_option(id_options_data *phod, wording W) {
|
||||
LOGIF(PHRASE_CREATIONS, "Adding phrase option <%W>\n", W);
|
||||
if (phod->no_options_permitted >= MAX_OPTIONS_PER_PHRASE) {
|
||||
if (too_many_POs_error == FALSE)
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TooManyPhraseOptions),
|
||||
if (PM_TooManyPhraseOptions_issued == FALSE)
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(),
|
||||
_p_(PM_TooManyPhraseOptions),
|
||||
"a phrase is only allowed to have 16 different options",
|
||||
"so either some of these will need to go, or you may want to "
|
||||
"consider breaking up the phrase into simpler ones whose usage "
|
||||
"is easier to describe.");
|
||||
too_many_POs_error = TRUE;
|
||||
"so either some of these will need to go, or you may want to consider "
|
||||
"breaking up the phrase into simpler ones whose usage is easier to describe.");
|
||||
PM_TooManyPhraseOptions_issued = TRUE;
|
||||
return;
|
||||
}
|
||||
too_many_POs_error = FALSE; /* so that the problem can recur on later phrases */
|
||||
PM_TooManyPhraseOptions_issued = FALSE; /* so the problem can recur on later phrases */
|
||||
|
||||
phrase_option *po = CREATE(phrase_option);
|
||||
po->name = W;
|
||||
phod->options_permitted[phod->no_options_permitted++] = po;
|
||||
}
|
||||
|
||||
@h Parsing.
|
||||
This isn't very efficient, but doesn't need to be, since phrase options are parsed
|
||||
only in a condition context, not in a value context, and these are relatively
|
||||
rare in Inform source text.
|
||||
|
||||
=
|
||||
id_options_data *phod_being_parsed = NULL;
|
||||
id_body *idb_being_parsed = NULL;
|
||||
|
||||
int PhraseOptions::parse_phod(id_options_data *phod, wording W) {
|
||||
for (int i = 0; i < phod->no_options_permitted; i++)
|
||||
if (Wordings::match(W, phod->options_permitted[i]->name))
|
||||
return (1 << i);
|
||||
return -1;
|
||||
}
|
||||
int PhraseOptions::parse(id_body *idb, wording W) {
|
||||
return PhraseOptions::parse_phod(&(idb->type_data.options_data), W);
|
||||
}
|
||||
|
||||
@ Which we wrap up thus:
|
||||
|
||||
=
|
||||
<phrase-option> internal {
|
||||
int bitmap = PhraseOptions::parse_phod(phod_being_parsed, W);
|
||||
if (bitmap == -1) { ==> { fail nonterminal }; }
|
||||
==> { bitmap, - };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@h Parsing phrase options in a declaration.
|
||||
The following is called with |W| set to just the part of a phrase prototype
|
||||
containing its phrase options. In this example:
|
||||
= (text as Inform 7)
|
||||
To decide which object is best route from (R1 - object) to (R2 - object),
|
||||
using doors or using even locked doors:
|
||||
=
|
||||
|W| would be "using doors or using even locked doors".
|
||||
|
||||
The syntax is just a list of names, but with the wrinkle that if the list is divided
|
||||
with "or" then the options are mutually exclusive, but with "and/or" they're not.
|
||||
|
||||
=
|
||||
void PhraseOptions::parse_declared_options(id_options_data *phod, wording W) {
|
||||
if (Wordings::nonempty(W)) {
|
||||
phod->options_declaration = W;
|
||||
phod_being_parsed = phod;
|
||||
<phrase-option-decl-list>(W);
|
||||
if (<<r>>) phod->multiple_options_permitted = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ Note the following Preform grammar passes the return value |TRUE| up from
|
||||
the final element of the list when the connective used for it was "and/or".
|
||||
Note also the rare use of the Preform literal marker in |\and/or| to show
|
||||
that the slash between "and" and "or" is part of the word.
|
||||
|
||||
=
|
||||
<phrase-option-decl-list> ::=
|
||||
... | ==> { lookahead }
|
||||
<phrase-option-decl-setting-entry> <phrase-option-decl-tail> | ==> { pass 2 }
|
||||
<phrase-option-decl-setting-entry> ==> { FALSE, - }
|
||||
|
||||
<phrase-option-decl-tail> ::=
|
||||
, _or <phrase-option-decl-list> | ==> { pass 1 }
|
||||
, \and/or <phrase-option-decl-list> | ==> { TRUE, - }
|
||||
_,/or <phrase-option-decl-list> | ==> { pass 1 }
|
||||
\and/or <phrase-option-decl-list> ==> { TRUE, - }
|
||||
|
||||
<phrase-option-decl-setting-entry> ::=
|
||||
... | ==> { lookahead }
|
||||
... ==> @<Add a phrase option@>;
|
||||
|
||||
@<Add a phrase option@> =
|
||||
PhraseOptions::phod_add_phrase_option(phod_being_parsed, W);
|
||||
==> { FALSE, - };
|
||||
|
||||
@h Parsing phrase options in an invocation.
|
||||
At this point, we're looking at the text after the first comma in something
|
||||
like:
|
||||
|
@ -161,12 +174,12 @@ produce.
|
|||
=
|
||||
int phod_being_parsed_silently = FALSE; /* context for the grammar below */
|
||||
|
||||
int Phrases::Options::parse_invoked_options(parse_node *inv, int silently) {
|
||||
int PhraseOptions::parse_invoked_options(parse_node *inv, int silently) {
|
||||
id_body *idb = Node::get_phrase_invoked(inv);
|
||||
wording W = Invocations::get_phrase_options(inv);
|
||||
|
||||
idb_being_parsed = idb;
|
||||
phod_being_parsed = &(idb_being_parsed->options_data);
|
||||
phod_being_parsed = &(idb_being_parsed->type_data.options_data);
|
||||
|
||||
int bitmap = 0;
|
||||
int pc = problem_count;
|
||||
|
@ -188,7 +201,7 @@ int Phrases::Options::parse_invoked_options(parse_node *inv, int silently) {
|
|||
@<Reject this if multiple options are set@>;
|
||||
|
||||
@ Ah, bit-twiddling: fun for all the family. There's no point computing the
|
||||
Hamming distance of the bitmap, that is, the number of bits set: we only need
|
||||
population count of the bitmap, that is, the number of bits set: we only need
|
||||
to know if it's a power of 2 or not. Note that subtracting 1, in binary,
|
||||
clears the least significant set bit, leaves the higher bits as they are,
|
||||
and changes the lower bits (which were previously all 0s) to 1s. So taking
|
||||
|
@ -203,7 +216,8 @@ this residue is zero.
|
|||
Problems::quote_wording(2, W);
|
||||
Problems::quote_phrase(3, idb);
|
||||
Problems::quote_wording(4, phod_being_parsed->options_declaration);
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_PhraseOptionsExclusive));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(),
|
||||
_p_(PM_PhraseOptionsExclusive));
|
||||
Problems::issue_problem_segment(
|
||||
"You wrote %1, supplying the options '%2' to the phrase '%3', but "
|
||||
"the options listed for this phrase ('%4') are mutually exclusive.");
|
||||
|
@ -217,17 +231,17 @@ by "and":
|
|||
|
||||
=
|
||||
<phrase-option-list> ::=
|
||||
... | ==> { lookahead }
|
||||
... | ==> { lookahead }
|
||||
<phrase-option-setting-entry> <phrase-option-tail> | ==> { R[1] | R[2], - }
|
||||
<phrase-option-setting-entry> ==> { pass 1 }
|
||||
<phrase-option-setting-entry> ==> { pass 1 }
|
||||
|
||||
<phrase-option-tail> ::=
|
||||
, _and <phrase-option-list> | ==> { pass 1 }
|
||||
_,/and <phrase-option-list> ==> { pass 1 }
|
||||
, _and <phrase-option-list> | ==> { pass 1 }
|
||||
_,/and <phrase-option-list> ==> { pass 1 }
|
||||
|
||||
<phrase-option-setting-entry> ::=
|
||||
<phrase-option> | ==> { pass 1 }
|
||||
... ==> @<Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem@>
|
||||
<phrase-option> | ==> { pass 1 }
|
||||
... ==> @<Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem@>
|
||||
|
||||
@<Issue PM_NotAPhraseOption or C22NotTheOnlyPhraseOption problem@> =
|
||||
if ((!preform_lookahead_mode) && (!phod_being_parsed_silently)) {
|
||||
|
@ -236,13 +250,15 @@ by "and":
|
|||
Problems::quote_phrase(3, idb_being_parsed);
|
||||
Problems::quote_wording(4, phod_being_parsed->options_declaration);
|
||||
if (phod_being_parsed->no_options_permitted > 1) {
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NotAPhraseOption));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(),
|
||||
_p_(PM_NotAPhraseOption));
|
||||
Problems::issue_problem_segment(
|
||||
"You wrote %1, but '%2' is not one of the options allowed on "
|
||||
"the end of the phrase '%3'. (The options allowed are: '%4'.)");
|
||||
Problems::issue_problem_end();
|
||||
} else {
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NotTheOnlyPhraseOption));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(),
|
||||
_p_(PM_NotTheOnlyPhraseOption));
|
||||
Problems::issue_problem_segment(
|
||||
"You wrote %1, but the only option allowed on the end of the "
|
||||
"phrase '%3' is '%4', so '%2' is not something I know how to "
|
||||
|
@ -250,13 +266,3 @@ by "and":
|
|||
Problems::issue_problem_end();
|
||||
}
|
||||
}
|
||||
|
||||
@ The following matches any single phrase option for the phrase being used.
|
||||
|
||||
=
|
||||
<phrase-option> internal {
|
||||
int bitmap = Phrases::Options::parse(phod_being_parsed, W);
|
||||
if (bitmap == -1) { ==> { fail nonterminal }; }
|
||||
==> { bitmap, - };
|
||||
return TRUE;
|
||||
}
|
|
@ -42,6 +42,8 @@ typedef struct id_type_data {
|
|||
int manner_of_return; /* one of the |*_MOR| values */
|
||||
struct kind *return_kind; /* |NULL| except in the |DECIDES_VALUE_MOR| case */
|
||||
|
||||
struct id_options_data options_data;
|
||||
|
||||
struct say_details as_say; /* used only for "say" phrases, that is, text substitutions */
|
||||
struct inline_details as_inline; /* side effects for phrases like C keywords */
|
||||
|
||||
|
@ -59,6 +61,7 @@ id_type_data IDTypeData::new(void) {
|
|||
idtd.as_say = IDTypeData::new_say_details();
|
||||
idtd.as_inline = IDTypeData::new_inline_details();
|
||||
idtd.now_deprecated = FALSE;
|
||||
idtd.options_data = PhraseOptions::new(EMPTY_WORDING);
|
||||
return idtd;
|
||||
}
|
||||
|
||||
|
|
|
@ -193,10 +193,8 @@ void ToPhraseFamily::given_body(imperative_defn_family *self, imperative_defn *i
|
|||
id_body *body = id->body_of_defn;
|
||||
Routines::prepare_for_requests(body);
|
||||
|
||||
wording XW = ToPhraseFamily::get_prototype_text(id);
|
||||
wording OW = EMPTY_WORDING;
|
||||
ParsingIDTypeData::parse(&(id->body_of_defn->type_data), XW, &OW);
|
||||
Phrases::Options::parse_declared_options(&(id->body_of_defn->options_data), OW);
|
||||
ParsingIDTypeData::parse(&(id->body_of_defn->type_data),
|
||||
ToPhraseFamily::get_prototype_text(id));
|
||||
|
||||
imperative_defn *previous_id = NULL;
|
||||
imperative_defn *current_id = first_in_logical_order;
|
||||
|
@ -504,9 +502,8 @@ kind *ToPhraseFamily::kind(constant_phrase *cphr) {
|
|||
if (cphr == NULL) return NULL;
|
||||
if (global_pass_state.pass < 2) return Kinds::binary_con(CON_phrase, K_value, K_value);
|
||||
if (cphr->cphr_kind == NULL) {
|
||||
wording OW = EMPTY_WORDING;
|
||||
id_type_data idtd = IDTypeData::new();
|
||||
ParsingIDTypeData::parse(&idtd, cphr->associated_preamble_text, &OW);
|
||||
ParsingIDTypeData::parse(&idtd, cphr->associated_preamble_text);
|
||||
cphr->cphr_kind = IDTypeData::kind(&idtd);
|
||||
}
|
||||
return cphr->cphr_kind;
|
||||
|
@ -564,16 +561,3 @@ imperative_defn *ToPhraseFamily::to_begin(void) {
|
|||
"these, specifying where execution should begin.");
|
||||
return beginner;
|
||||
}
|
||||
|
||||
@h Phrase option parsing.
|
||||
These indirections are provided so that the implementation of phrase options
|
||||
is confined to the current Chapter.
|
||||
|
||||
=
|
||||
int ToPhraseFamily::allows_options(id_body *idb) {
|
||||
return Phrases::Options::allows_options(&(idb->options_data));
|
||||
}
|
||||
|
||||
int ToPhraseFamily::parse_phrase_option_used(id_body *idb, wording W) {
|
||||
return Phrases::Options::parse(&(idb->options_data), W);
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ Chapter 5: Imperative Code
|
|||
To Phrase Family
|
||||
Phrase Type Data
|
||||
Parsing Type Data
|
||||
Phrase Options
|
||||
Rule Family
|
||||
|
||||
Chapter 6: Other Gadgets
|
||||
|
|
|
@ -45,8 +45,8 @@ void ActionsPlugin::start(void) {
|
|||
PluginManager::plug(RULE_PLACEMENT_NOTIFY_PLUG, Actions::rule_placement_notify);
|
||||
PluginManager::plug(PRODUCTION_LINE_PLUG, ActionsPlugin::production_line);
|
||||
PluginManager::plug(COMPLETE_MODEL_PLUG, ActionsPlugin::complete_model);
|
||||
PluginManager::plug(COMPILE_TEST_HEAD_PLUG, Phrases::Context::actions_compile_test_head);
|
||||
PluginManager::plug(COMPILE_TEST_TAIL_PLUG, Phrases::Context::actions_compile_test_tail);
|
||||
PluginManager::plug(COMPILE_TEST_HEAD_PLUG, RTRules::actions_compile_test_head);
|
||||
PluginManager::plug(COMPILE_TEST_TAIL_PLUG, RTRules::actions_compile_test_tail);
|
||||
|
||||
Vocabulary::set_flags(Vocabulary::entry_for_text(L"doing"), ACTION_PARTICIPLE_MC);
|
||||
Vocabulary::set_flags(Vocabulary::entry_for_text(L"asking"), ACTION_PARTICIPLE_MC);
|
||||
|
|
|
@ -329,219 +329,6 @@ void Phrases::Context::ensure_avl(rule *R) {
|
|||
}
|
||||
}
|
||||
|
||||
@h Compiling the firing test.
|
||||
Each rule compiles to a routine, and this routine is called whenever the
|
||||
opportunity might exist for the rule to fire. The structure of this is
|
||||
similar to:
|
||||
= (text as Inform 6)
|
||||
[ Rule;
|
||||
if (some-firing-condition) {
|
||||
...
|
||||
return some-default-outcome;
|
||||
}
|
||||
];
|
||||
=
|
||||
The "test head" is the "if" line here, and the "test tail" is the "}". The
|
||||
return statement isn't necessarily reached, because even if the firing
|
||||
condition holds, the "..." code may decide to return in some other way.
|
||||
It provides only a default to cover rules which don't specify an outcome.
|
||||
|
||||
In general the test is more elaborate than a single "if", though not very
|
||||
much.
|
||||
|
||||
=
|
||||
int Phrases::Context::compile_test_head(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
|
||||
if (RTRules::compile_constraint(R) == TRUE) return TRUE;
|
||||
|
||||
int tests = 0;
|
||||
|
||||
if (PluginCalls::compile_test_head(idb, R, &tests) == FALSE) {
|
||||
if (phrcd->ap) @<Compile an action test head@>;
|
||||
}
|
||||
if (Wordings::nonempty(phrcd->activity_context))
|
||||
@<Compile an activity or explicit condition test head@>;
|
||||
|
||||
if ((tests > 0) || (idb->compilation_data.compile_with_run_time_debugging)) {
|
||||
Produce::inv_primitive(Emit::tree(), IF_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(DEBUG_RULES_HL));
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DB_RULE_HL));
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_value, identifier);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) idb->allocation_id);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int Phrases::Context::actions_compile_test_head(id_body *idb, rule *R, int *tests) {
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
#ifdef IF_MODULE
|
||||
if (phrcd->during_scene) @<Compile a scene test head@>;
|
||||
if (phrcd->ap) @<Compile possibly testing actor action test head@>
|
||||
else if (phrcd->always_test_actor == TRUE) @<Compile an actor-is-player test head@>;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int Phrases::Context::actions_compile_test_tail(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
#ifdef IF_MODULE
|
||||
if (phrcd->ap) @<Compile an action test tail@>
|
||||
else if (phrcd->always_test_actor == TRUE) @<Compile an actor-is-player test tail@>;
|
||||
if (phrcd->during_scene) @<Compile a scene test tail@>;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ This is almost the up-down reflection of the head, but note that it begins
|
||||
with the default outcome return (see above).
|
||||
|
||||
=
|
||||
void Phrases::Context::compile_test_tail(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
rulebook *rb = RuleFamily::get_rulebook(idb->head_of_defn);
|
||||
if (rb) RTRules::compile_default_outcome(Rulebooks::get_outcomes(rb));
|
||||
if (Wordings::nonempty(phrcd->activity_context))
|
||||
@<Compile an activity or explicit condition test tail@>;
|
||||
if (PluginCalls::compile_test_tail(idb, R) == FALSE) {
|
||||
if (phrcd->ap) @<Compile an action test tail@>;
|
||||
}
|
||||
}
|
||||
|
||||
@h Scene test.
|
||||
|
||||
@<Compile a scene test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
RTScenes::emit_during_clause(phrcd->during_scene);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
|
||||
@<Compile a scene test tail@> =
|
||||
inter_ti failure_code = 1;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Action test.
|
||||
|
||||
@<Compile an action test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, TRUE);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
tests++;
|
||||
if (ActionPatterns::involves_actions(phrcd->ap)) {
|
||||
Produce::inv_primitive(Emit::tree(), STORE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::ref_iname(Emit::tree(), K_object, Hierarchy::find(SELF_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(NOUN_HL));
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
|
||||
@<Compile possibly testing actor action test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
if (phrcd->never_test_actor)
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, TRUE);
|
||||
else
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, FALSE);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
if (ActionPatterns::involves_actions(phrcd->ap)) {
|
||||
Produce::inv_primitive(Emit::tree(), STORE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::ref_iname(Emit::tree(), K_object, Hierarchy::find(SELF_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(NOUN_HL));
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
|
||||
@<Compile an action test tail@> =
|
||||
inter_ti failure_code = 2;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Actor-is-player test.
|
||||
|
||||
@<Compile an actor-is-player test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), EQ_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(ACTOR_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(PLAYER_HL));
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
|
||||
@<Compile an actor-is-player test tail@> =
|
||||
inter_ti failure_code = 3;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Activity-or-condition test.
|
||||
|
||||
@<Compile an activity or explicit condition test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
activity_list *avl = phrcd->avl;
|
||||
if (avl) {
|
||||
RTActivities::emit_activity_list(avl);
|
||||
} else {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_BadWhenWhile),
|
||||
"I don't understand the 'when/while' clause",
|
||||
"which should name activities or conditions.");
|
||||
Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
|
||||
}
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
IXActivities::annotate_list_for_cross_references(avl, idb);
|
||||
tests++;
|
||||
|
||||
@<Compile an activity or explicit condition test tail@> =
|
||||
inter_ti failure_code = 4;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@<Compile a generic test fail@> =
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), IF_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), GT_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(DEBUG_RULES_HL));
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DB_RULE_HL));
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_value, identifier);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) idb->allocation_id);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, failure_code);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
|
||||
@
|
||||
|
||||
=
|
||||
|
|
|
@ -231,7 +231,7 @@ charlatans" and what they "deserve". I'm a better person now.
|
|||
@ Acting on that:
|
||||
|
||||
@<Expand a bracing containing natural language text@> =
|
||||
phod_being_parsed = &(idb->options_data);
|
||||
phod_being_parsed = &(idb->type_data.options_data);
|
||||
idb_being_parsed = idb;
|
||||
<inline-substitution>(BRW);
|
||||
int current_opts = Invocations::get_phrase_options_bitmap(inv);
|
||||
|
|
|
@ -72,14 +72,14 @@ void Routines::Compile::routine(id_body *idb,
|
|||
|
||||
@<Compile the body of the routine@> =
|
||||
current_sentence = code_at;
|
||||
if (Phrases::Context::compile_test_head(idb, R) == FALSE) {
|
||||
if (RTRules::compile_test_head(idb, R) == FALSE) {
|
||||
if (code_at) {
|
||||
VerifyTree::verify_structure_from(code_at);
|
||||
Routines::Compile::code_block_outer(1, code_at->down);
|
||||
VerifyTree::verify_structure_from(code_at);
|
||||
}
|
||||
current_sentence = code_at;
|
||||
Phrases::Context::compile_test_tail(idb, R);
|
||||
RTRules::compile_test_tail(idb, R);
|
||||
|
||||
@<Compile a terminal return statement@>;
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ premisses worked out, and are then collected together into rulebooks, before
|
|||
being compiled as a great mass of Inform 6 routines and arrays."
|
||||
Introduction to Phrases
|
||||
Phrase Runtime Context Data
|
||||
Phrase Options
|
||||
|
||||
Chapter 4: Compilation Context
|
||||
"Preparing a context at run-time in which code can be executed."
|
||||
|
|
|
@ -250,7 +250,7 @@ void Phrases::Index::write_reveal_box(OUTPUT_STREAM, id_type_data *idtd, id_body
|
|||
HTML_OPEN("p");
|
||||
@<Present a paste button containing the text of the phrase@>;
|
||||
Phrases::Index::index_type_data(OUT, idtd, idb);
|
||||
Phrases::Index::index_phrase_options(OUT, &(idb->options_data));
|
||||
Phrases::Index::index_phrase_options(OUT, &(idb->type_data.options_data));
|
||||
@<Quote from and reference to the documentation, where possible@>;
|
||||
@<Present the equation form of the phrase, if it has one@>;
|
||||
@<Present the name of the phrase regarded as a value, if it has one@>;
|
||||
|
|
|
@ -57,9 +57,10 @@ void IDCompilation::make_inline(id_body *idb, int inline_wn, int mor) {
|
|||
|
||||
=
|
||||
void IDCompilation::prepare_stack_frame(id_body *body) {
|
||||
IDCompilation::initialise_stack_frame_from_type_data(&(body->compilation_data.stack_frame), &(body->type_data),
|
||||
IDCompilation::initialise_stack_frame_from_type_data(
|
||||
&(body->compilation_data.stack_frame), &(body->type_data),
|
||||
IDTypeData::kind(&(body->type_data)), TRUE);
|
||||
if (Phrases::Options::allows_options(&(body->options_data)))
|
||||
if (PhraseOptions::allows_options(body))
|
||||
LocalVariables::options_parameter_is_needed(&(body->compilation_data.stack_frame));
|
||||
}
|
||||
|
||||
|
|
|
@ -955,3 +955,212 @@ void RTRules::RulebookOutcomePrintingRule(void) {
|
|||
Produce::up(Emit::tree());
|
||||
Routines::end(save);
|
||||
}
|
||||
|
||||
@h Compiling the firing test.
|
||||
Each rule compiles to a routine, and this routine is called whenever the
|
||||
opportunity might exist for the rule to fire. The structure of this is
|
||||
similar to:
|
||||
= (text as Inform 6)
|
||||
[ Rule;
|
||||
if (some-firing-condition) {
|
||||
...
|
||||
return some-default-outcome;
|
||||
}
|
||||
];
|
||||
=
|
||||
The "test head" is the "if" line here, and the "test tail" is the "}". The
|
||||
return statement isn't necessarily reached, because even if the firing
|
||||
condition holds, the "..." code may decide to return in some other way.
|
||||
It provides only a default to cover rules which don't specify an outcome.
|
||||
|
||||
In general the test is more elaborate than a single "if", though not very
|
||||
much.
|
||||
|
||||
=
|
||||
int RTRules::compile_test_head(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
|
||||
if (RTRules::compile_constraint(R) == TRUE) return TRUE;
|
||||
|
||||
int tests = 0;
|
||||
|
||||
if (PluginCalls::compile_test_head(idb, R, &tests) == FALSE) {
|
||||
if (phrcd->ap) @<Compile an action test head@>;
|
||||
}
|
||||
if (Wordings::nonempty(phrcd->activity_context))
|
||||
@<Compile an activity or explicit condition test head@>;
|
||||
|
||||
if ((tests > 0) || (idb->compilation_data.compile_with_run_time_debugging)) {
|
||||
Produce::inv_primitive(Emit::tree(), IF_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(DEBUG_RULES_HL));
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DB_RULE_HL));
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_value, identifier);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) idb->allocation_id);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int RTRules::actions_compile_test_head(id_body *idb, rule *R, int *tests) {
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
if (phrcd->during_scene) @<Compile a scene test head@>;
|
||||
if (phrcd->ap) @<Compile possibly testing actor action test head@>
|
||||
else if (phrcd->always_test_actor == TRUE) @<Compile an actor-is-player test head@>;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int RTRules::actions_compile_test_tail(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
if (phrcd->ap) @<Compile an action test tail@>
|
||||
else if (phrcd->always_test_actor == TRUE) @<Compile an actor-is-player test tail@>;
|
||||
if (phrcd->during_scene) @<Compile a scene test tail@>;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ This is almost the up-down reflection of the head, but note that it begins
|
||||
with the default outcome return (see above).
|
||||
|
||||
=
|
||||
void RTRules::compile_test_tail(id_body *idb, rule *R) {
|
||||
inter_name *identifier = IDCompilation::iname(idb);
|
||||
id_runtime_context_data *phrcd = &(idb->runtime_context_data);
|
||||
rulebook *rb = RuleFamily::get_rulebook(idb->head_of_defn);
|
||||
if (rb) RTRules::compile_default_outcome(Rulebooks::get_outcomes(rb));
|
||||
if (Wordings::nonempty(phrcd->activity_context))
|
||||
@<Compile an activity or explicit condition test tail@>;
|
||||
if (PluginCalls::compile_test_tail(idb, R) == FALSE) {
|
||||
if (phrcd->ap) @<Compile an action test tail@>;
|
||||
}
|
||||
}
|
||||
|
||||
@h Scene test.
|
||||
|
||||
@<Compile a scene test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
RTScenes::emit_during_clause(phrcd->during_scene);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
|
||||
@<Compile a scene test tail@> =
|
||||
inter_ti failure_code = 1;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Action test.
|
||||
|
||||
@<Compile an action test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, TRUE);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
tests++;
|
||||
if (ActionPatterns::involves_actions(phrcd->ap)) {
|
||||
Produce::inv_primitive(Emit::tree(), STORE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::ref_iname(Emit::tree(), K_object, Hierarchy::find(SELF_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(NOUN_HL));
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
|
||||
@<Compile possibly testing actor action test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
if (phrcd->never_test_actor)
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, TRUE);
|
||||
else
|
||||
RTActionPatterns::emit_pattern_match(phrcd->ap, FALSE);
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
if (ActionPatterns::involves_actions(phrcd->ap)) {
|
||||
Produce::inv_primitive(Emit::tree(), STORE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::ref_iname(Emit::tree(), K_object, Hierarchy::find(SELF_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(NOUN_HL));
|
||||
Produce::up(Emit::tree());
|
||||
}
|
||||
|
||||
@<Compile an action test tail@> =
|
||||
inter_ti failure_code = 2;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Actor-is-player test.
|
||||
|
||||
@<Compile an actor-is-player test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), EQ_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(ACTOR_HL));
|
||||
Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(PLAYER_HL));
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
(*tests)++;
|
||||
|
||||
@<Compile an actor-is-player test tail@> =
|
||||
inter_ti failure_code = 3;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@h Activity-or-condition test.
|
||||
|
||||
@<Compile an activity or explicit condition test head@> =
|
||||
Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
activity_list *avl = phrcd->avl;
|
||||
if (avl) {
|
||||
RTActivities::emit_activity_list(avl);
|
||||
} else {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_BadWhenWhile),
|
||||
"I don't understand the 'when/while' clause",
|
||||
"which should name activities or conditions.");
|
||||
Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
|
||||
}
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
|
||||
IXActivities::annotate_list_for_cross_references(avl, idb);
|
||||
tests++;
|
||||
|
||||
@<Compile an activity or explicit condition test tail@> =
|
||||
inter_ti failure_code = 4;
|
||||
@<Compile a generic test fail@>;
|
||||
|
||||
@<Compile a generic test fail@> =
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), IF_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_primitive(Emit::tree(), GT_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(DEBUG_RULES_HL));
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::code(Emit::tree());
|
||||
Produce::down(Emit::tree());
|
||||
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DB_RULE_HL));
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_iname(Emit::tree(), K_value, identifier);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) idb->allocation_id);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, failure_code);
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
Produce::up(Emit::tree());
|
||||
|
|
|
@ -1663,7 +1663,7 @@ options are properly used.
|
|||
@<Step (4I.f) Check any phrase options@> =
|
||||
LOG_DASH("(4I.f)");
|
||||
if ((outcome != NEVER_MATCH) && (Node::get_phrase_options_invoked(inv))) {
|
||||
int cso = Phrases::Options::parse_invoked_options(
|
||||
int cso = PhraseOptions::parse_invoked_options(
|
||||
inv, (TEST_DASH_MODE(ISSUE_PROBLEMS_DMODE))?FALSE:TRUE);
|
||||
if (cso == FALSE) outcome = NEVER_MATCH;
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ being compiled; all others are out of scope.
|
|||
=
|
||||
<s-phrase-option-in-use> internal {
|
||||
if (id_body_being_compiled) {
|
||||
int i = ToPhraseFamily::parse_phrase_option_used(id_body_being_compiled, W);
|
||||
int i = PhraseOptions::parse(id_body_being_compiled, W);
|
||||
if (i >= 0) {
|
||||
==> { -, Conditions::new_TEST_PHRASE_OPTION(i) };
|
||||
return TRUE;
|
||||
|
|
|
@ -317,7 +317,7 @@ though it can be any type of phrase.
|
|||
@<Look through to see if there are phrase options at the end@> =
|
||||
#ifdef CORE_MODULE
|
||||
id_body *idb = ToPhraseFamily::meaning_as_phrase(Node::get_meaning(p));
|
||||
if (ToPhraseFamily::allows_options(idb)) {
|
||||
if (PhraseOptions::allows_options(idb)) {
|
||||
LOGIF(EXCERPT_PARSING, "Looking for phrase options\n");
|
||||
for (bl=0, scan_pos=Wordings::first_wn(W)+1;
|
||||
scan_pos<Wordings::last_wn(W); scan_pos++) {
|
||||
|
|
Loading…
Reference in a new issue