1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 04:00:43 +03:00

Digits and values for LPEs

This commit is contained in:
Graham Nelson 2023-07-15 00:28:00 +01:00
parent ed743bbcb6
commit f6c3b1f505
37 changed files with 1282 additions and 431 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W81 'Krypton' (14 July 2023)
[Version](notes/versioning.md): 10.2.0-beta+6W82 'Krypton' (15 July 2023)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 14 July 2023
Build Number: 6W81
Build Date: 15 July 2023
Build Number: 6W82

View file

@ -328,11 +328,11 @@ in base 3 and 1Z141Y3 in base 36.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">PrintInBase</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> </span><span class="identifier-syntax">base</span><span class="plain-syntax"> </span><span class="identifier-syntax">digits</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">PrintInBase</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> </span><span class="identifier-syntax">base</span><span class="plain-syntax"> </span><span class="identifier-syntax">digits</span><span class="plain-syntax"> </span><span class="identifier-syntax">digitset</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">base</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">2</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">base</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">36</span><span class="plain-syntax">)) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"("</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="string-syntax">" in base "</span><span class="plain-syntax">, </span><span class="identifier-syntax">base</span><span class="plain-syntax">, </span><span class="string-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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">digits</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">digits</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">digits</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">100</span><span class="plain-syntax">) </span><span class="identifier-syntax">digits</span><span class="plain-syntax"> = </span><span class="constant-syntax">100</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">base</span><span class="plain-syntax"> == </span><span class="constant-syntax">10</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">digits</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</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">base</span><span class="plain-syntax"> == </span><span class="constant-syntax">10</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">digits</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">digitset</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</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">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="identifier-syntax">digit_count</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">else</span><span class="plain-syntax"> {</span>
@ -343,11 +343,18 @@ in base 3 and 1Z141Y3 in base 36.
<span class="plain-syntax"> </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">until</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="identifier-syntax">digits</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax">--) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-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">j</span><span class="plain-syntax"> = </span><span class="identifier-syntax">digits</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax">--) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">digitset</span><span class="plain-syntax">) </span><span class="identifier-syntax">digitset</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"0"</span><span class="plain-syntax">;</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">j</span><span class="plain-syntax"> = </span><span class="identifier-syntax">digit_count</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">j</span><span class="plain-syntax">--) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">k</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">j</span><span class="plain-syntax">: </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) </span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DropDigit</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">base</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LeastDigit</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">base</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">10</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + </span><span class="identifier-syntax">d</span><span class="plain-syntax"> - </span><span class="constant-syntax">10</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">digitset</span><span class="plain-syntax">) </span><span class="identifier-syntax">digitset</span><span class="plain-syntax">(</span><span class="identifier-syntax">d</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">10</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">char</span><span class="plain-syntax">) </span><span class="character-syntax">'A'</span><span class="plain-syntax"> + </span><span class="identifier-syntax">d</span><span class="plain-syntax"> - </span><span class="constant-syntax">10</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">];</span>
</pre>

View file

@ -413,7 +413,7 @@ by a bracketed list of up to three options in any order.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;lp-part&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
<span class="Preform-function-syntax">&lt;lp-part&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;np-unparsed-bal&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;lp-part-option-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, LPRequests::mark(RP[1], R[2], &lt;&lt;min_part_val&gt;&gt;, &lt;&lt;max_part_val&gt;&gt;) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;np-unparsed-bal&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;lp-part-option-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, LPRequests::mark(RP[1], R[2], &lt;&lt;min_part_val&gt;&gt;, &lt;&lt;max_part_val&gt;&gt;, &lt;&lt;digits_wd_val&gt;&gt;, &lt;&lt;values_wd_val&gt;&gt;) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;np-unparsed-bal&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
<span class="Preform-function-syntax">&lt;lp-part-option-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
@ -435,7 +435,9 @@ by a bracketed list of up to three options in any order.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">up</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;cardinal-number&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Apply max digit count</span><span class="named-paragraph-number">8.2</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;cardinal-number&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;number-base&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_5" class="named-paragraph-link"><span class="named-paragraph">Apply based digit count</span><span class="named-paragraph-number">8.5</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;cardinal-number&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Apply digit count</span><span class="named-paragraph-number">8.3</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_6" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadLPPartOption problem</span><span class="named-paragraph-number">8.6</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digits</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> &lt;&lt;digits_wd_val&gt;&gt; = Wordings::first_wn(WR[1]); </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_6" class="named-paragraph-link"><span class="named-paragraph">Apply digits text</span><span class="named-paragraph-number">8.6</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">values</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> &lt;&lt;values_wd_val&gt;&gt; = Wordings::first_wn(WR[1]); </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_7" class="named-paragraph-link"><span class="named-paragraph">Apply values text</span><span class="named-paragraph-number">8.7</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_8" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadLPPartOption problem</span><span class="named-paragraph-number">8.8</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="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply range</span><span class="named-paragraph-number">8.1</span></span><span class="Preform-comment-syntax"> =</span>
@ -493,7 +495,21 @@ by a bracketed list of up to three options in any order.
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">MAX_DIGITS_LSO</span><span class="plain-syntax">*</span><span class="identifier-syntax">R</span><span class="plain-syntax">[1] + </span><span class="constant-syntax">MIN_DIGITS_LSO</span><span class="plain-syntax">*</span><span class="identifier-syntax">R</span><span class="plain-syntax">[1] + </span><span class="constant-syntax">BASE_LSO</span><span class="plain-syntax">*</span><span class="identifier-syntax">R</span><span class="plain-syntax">[2] + </span><span class="constant-syntax">WITH_LEADING_ZEROS_LSO</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-nlpr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_6" class="paragraph-anchor"></a><b>&#167;8.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadLPPartOption problem</span><span class="named-paragraph-number">8.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP8_6" class="paragraph-anchor"></a><b>&#167;8.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply digits text</span><span class="named-paragraph-number">8.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">DIGITS_TEXT_LSO</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-nlpr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_7" class="paragraph-anchor"></a><b>&#167;8.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply values text</span><span class="named-paragraph-number">8.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">VALUES_TEXT_LSO</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-nlpr.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_8" class="paragraph-anchor"></a><b>&#167;8.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadLPPartOption problem</span><span class="named-paragraph-number">8.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -528,6 +544,8 @@ by a bracketed list of up to three options in any order.
<span class="definition-keyword">define</span> <span class="constant-syntax">WITHOUT_LEADING_ZEROS_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000008</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000010</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MINIMUM_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000020</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">DIGITS_TEXT_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000040</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">VALUES_TEXT_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000080</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BASE_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000100</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BASE_MASK_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x0000ff00</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MIN_DIGITS_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00010000</span>
@ -536,11 +554,13 @@ by a bracketed list of up to three options in any order.
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_DIGITS_MASK_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x7f000000</span>
</pre>
<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">LPRequests::mark</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">LPRequests::mark</span></span>:<br/><a href="3-nlpr.html#SP8">&#167;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">A</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MI</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MA</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">LPRequests::mark</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">LPRequests::mark</span></span>:<br/><a href="3-nlpr.html#SP8">&#167;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">A</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MI</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MA</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">DT</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">VT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_options_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">MINIMUM_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_min_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MI</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_max_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MA</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">DIGITS_TEXT_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_digits_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">DT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">VALUES_TEXT_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_values_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">VT</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">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -152,6 +152,8 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<span class="definition-keyword">enum</span> <span class="constant-syntax">literal_list_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">literal_pattern_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">literal_pattern_name_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">literal_pattern_element_value_set_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">literal_pattern_element_value_pair_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">llist_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">nonlocal_variable_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">response_message_CLASS</span>
@ -167,6 +169,8 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_list</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_pattern</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_pattern_name</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_pattern_element_value_set</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_pattern_element_value_pair</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">llist_entry</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">response_message</span><span class="plain-syntax">)</span>

View file

@ -530,6 +530,8 @@ which compilation unit the node belongs.
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: options set for a literal pattern part</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: value offset for a literal pattern part</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: maximum value for a literal pattern part</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_digits_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: word number of digits text for a literal pattern part</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_values_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: word number of values text for a literal pattern part</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: e.g., 5 for "five gold rings"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">binary_predicate</span></span><span class="comment-syntax">: new relation as subject of "relates" sentence</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">nowhere_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by the spatial feature to show this represents "nowhere"</span>
@ -586,6 +588,10 @@ which compilation unit the node belongs.
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_lpe_min_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">lpe_digits_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_lpe_digits_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">lpe_values_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_lpe_values_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_multiplicity_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_new_relation_here_ANNOT</span></a><span class="plain-syntax">);</span>
@ -643,6 +649,12 @@ which compilation unit the node belongs.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_lpe_min_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {lpe offset: %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_min_ANNOT</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">CoreSyntax::write_lpe_digits_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {lpe digits: %W}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_digits_ANNOT</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">CoreSyntax::write_lpe_values_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {lpe values: %W}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_values_ANNOT</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">CoreSyntax::write_multiplicity_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {multiplicity %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">));</span>
@ -720,6 +732,8 @@ which compilation unit the node belongs.
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_digits_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_values_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNPARSED_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">);</span>

View file

@ -184,7 +184,7 @@ number of successes.
<span class="plain-syntax">Size of lexicon: 3163 excerpt meanings</span>
<span class="plain-syntax"> Stored among 856 words out of total vocabulary of 10784</span>
<span class="plain-syntax"> 720 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax"> 21 words have an end list: longest belongs to digit (with 7 meanings)</span>
<span class="plain-syntax"> 21 words have an end list: longest belongs to digits (with 7 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
<span class="plain-syntax"> 108 words have a subset list: longest belongs to street (with 4 meanings)</span>

View file

@ -81,10 +81,12 @@ which use this module:
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">contents_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">digit_manager_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">mapping_hint_CLASS</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">contents_entry</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">digit_manager</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">mapping_hint</span><span class="plain-syntax">)</span>
</pre>
<nav role="progress"><div class="progresscontainer">

File diff suppressed because one or more lines are too long

View file

@ -79,7 +79,7 @@ creates the <span class="extract"><span class="extract-syntax">main</span></span
<span class="plain-syntax"> </span><span class="identifier-syntax">LargeScale::begin_new_tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">main_emission_tree</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">main_emission_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</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">Emit::tree</span></span>:<br/><a href="2-emt.html#SP4">&#167;4</a>, <a href="2-emt.html#SP5">&#167;5</a>, <a href="2-emt.html#SP6">&#167;6</a>, <a href="2-emt.html#SP7">&#167;7</a>, <a href="2-emt.html#SP8">&#167;8</a>, <a href="2-emt.html#SP9">&#167;9</a>, <a href="2-emt.html#SP11">&#167;11</a>, <a href="2-emt.html#SP12">&#167;12</a>, <a href="2-emt.html#SP13">&#167;13</a>, <a href="2-emt.html#SP14">&#167;14</a><br/>Hierarchy - <a href="2-hrr.html#SP1">&#167;1</a>, <a href="2-hrr.html#SP2">&#167;2</a>, <a href="2-hrr.html#SP8">&#167;8</a>, <a href="2-hrr.html#SP9">&#167;9</a>, <a href="2-hrr.html#SP11">&#167;11</a>, <a href="2-hrr.html#SP12">&#167;12</a>, <a href="2-hrr.html#SP13">&#167;13</a>, <a href="2-hrr.html#SP14">&#167;14</a>, <a href="2-hrr.html#SP15">&#167;15</a>, <a href="2-hrr.html#SP16">&#167;16</a>, <a href="2-hrr.html#SP17">&#167;17</a>, <a href="2-hrr.html#SP18">&#167;18</a>, <a href="2-hrr.html#SP20">&#167;20</a>, <a href="2-hrr.html#SP21">&#167;21</a>, <a href="2-hrr.html#SP22">&#167;22</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">&#167;2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">&#167;2</a>, <a href="2-ec.html#SP3">&#167;3</a>, <a href="2-ec.html#SP4">&#167;4</a>, <a href="2-ec.html#SP5">&#167;5</a>, <a href="2-ec.html#SP7">&#167;7</a>, <a href="2-ec.html#SP8">&#167;8</a>, <a href="2-ec.html#SP10">&#167;10</a>, <a href="2-ec.html#SP12">&#167;12</a>, <a href="2-ec.html#SP13">&#167;13</a>, <a href="2-ec.html#SP14">&#167;14</a>, <a href="2-ec.html#SP15">&#167;15</a>, <a href="2-ec.html#SP16">&#167;16</a>, <a href="2-ec.html#SP17">&#167;17</a><br/>Emit Arrays - <a href="2-ea.html#SP5">&#167;5</a><br/>Default Values - <a href="2-dv.html#SP1">&#167;1</a><br/>Generic Module - <a href="3-gm.html#SP1">&#167;1</a><br/>Use Options - <a href="3-uo.html#SP3">&#167;3</a><br/>Enclosures - <a href="4-enc.html#SP1">&#167;1</a><br/>Text Substitutions - <a href="4-ts.html#SP7_4">&#167;7.4</a><br/>Rules - <a href="5-rls.html#SP6">&#167;6</a><br/>Variables - <a href="5-vrb.html#SP6">&#167;6</a>, <a href="5-vrb.html#SP15">&#167;15</a><br/>Kind Constructors - <a href="5-kc.html#SP3">&#167;3</a>, <a href="5-kc.html#SP9">&#167;9</a>, <a href="5-kc.html#SP12">&#167;12</a>, <a href="5-kc.html#SP17_1">&#167;17.1</a><br/>Property Permissions - <a href="6-pp.html#SP2">&#167;2</a>, <a href="6-pp.html#SP3">&#167;3</a><br/>Property Values - <a href="6-pv.html#SP2">&#167;2</a>, <a href="6-pv.html#SP2_2_1">&#167;2.2.1</a><br/>Command Grammars - <a href="7-cg.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</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">Emit::tree</span></span>:<br/><a href="2-emt.html#SP4">&#167;4</a>, <a href="2-emt.html#SP5">&#167;5</a>, <a href="2-emt.html#SP6">&#167;6</a>, <a href="2-emt.html#SP7">&#167;7</a>, <a href="2-emt.html#SP8">&#167;8</a>, <a href="2-emt.html#SP9">&#167;9</a>, <a href="2-emt.html#SP11">&#167;11</a>, <a href="2-emt.html#SP12">&#167;12</a>, <a href="2-emt.html#SP13">&#167;13</a>, <a href="2-emt.html#SP14">&#167;14</a><br/>Hierarchy - <a href="2-hrr.html#SP1">&#167;1</a>, <a href="2-hrr.html#SP2">&#167;2</a>, <a href="2-hrr.html#SP8">&#167;8</a>, <a href="2-hrr.html#SP9">&#167;9</a>, <a href="2-hrr.html#SP11">&#167;11</a>, <a href="2-hrr.html#SP12">&#167;12</a>, <a href="2-hrr.html#SP13">&#167;13</a>, <a href="2-hrr.html#SP14">&#167;14</a>, <a href="2-hrr.html#SP15">&#167;15</a>, <a href="2-hrr.html#SP16">&#167;16</a>, <a href="2-hrr.html#SP17">&#167;17</a>, <a href="2-hrr.html#SP18">&#167;18</a>, <a href="2-hrr.html#SP20">&#167;20</a>, <a href="2-hrr.html#SP21">&#167;21</a>, <a href="2-hrr.html#SP22">&#167;22</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">&#167;2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">&#167;2</a>, <a href="2-ec.html#SP3">&#167;3</a>, <a href="2-ec.html#SP4">&#167;4</a>, <a href="2-ec.html#SP5">&#167;5</a>, <a href="2-ec.html#SP7">&#167;7</a>, <a href="2-ec.html#SP8">&#167;8</a>, <a href="2-ec.html#SP10">&#167;10</a>, <a href="2-ec.html#SP12">&#167;12</a>, <a href="2-ec.html#SP13">&#167;13</a>, <a href="2-ec.html#SP14">&#167;14</a>, <a href="2-ec.html#SP15">&#167;15</a>, <a href="2-ec.html#SP16">&#167;16</a>, <a href="2-ec.html#SP17">&#167;17</a><br/>Emit Arrays - <a href="2-ea.html#SP5">&#167;5</a><br/>Default Values - <a href="2-dv.html#SP1">&#167;1</a><br/>Generic Module - <a href="3-gm.html#SP1">&#167;1</a><br/>Use Options - <a href="3-uo.html#SP3">&#167;3</a><br/>Enclosures - <a href="4-enc.html#SP1">&#167;1</a><br/>Text Substitutions - <a href="4-ts.html#SP7_4">&#167;7.4</a><br/>Rules - <a href="5-rls.html#SP6">&#167;6</a><br/>Variables - <a href="5-vrb.html#SP6">&#167;6</a>, <a href="5-vrb.html#SP15">&#167;15</a><br/>Literal Patterns - <a href="5-lp.html#SP7">&#167;7</a><br/>Kind Constructors - <a href="5-kc.html#SP3">&#167;3</a>, <a href="5-kc.html#SP9">&#167;9</a>, <a href="5-kc.html#SP12">&#167;12</a>, <a href="5-kc.html#SP17_1">&#167;17.1</a><br/>Property Permissions - <a href="6-pp.html#SP2">&#167;2</a>, <a href="6-pp.html#SP3">&#167;3</a><br/>Property Values - <a href="6-pv.html#SP2">&#167;2</a>, <a href="6-pv.html#SP2_2_1">&#167;2.2.1</a><br/>Command Grammars - <a href="7-cg.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">main_emission_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -103,7 +103,7 @@ creates the <span class="extract"><span class="extract-syntax">main</span></span
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterBookmark::package</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::at</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::current_enclosure</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">Emit::current_enclosure</span></span>:<br/>Enclosures - <a href="4-enc.html#SP1">&#167;1</a><br/>Text Substitutions - <a href="4-ts.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::current_enclosure</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">Emit::current_enclosure</span></span>:<br/>Enclosures - <a href="4-enc.html#SP1">&#167;1</a><br/>Text Substitutions - <a href="4-ts.html#SP5">&#167;5</a><br/>Literal Patterns - <a href="5-lp.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Packaging::enclosure</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>

File diff suppressed because one or more lines are too long

View file

@ -94,7 +94,7 @@ existed only to serve the needs of an unusual single work of IF called
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VH</span><span class="plain-syntax">) </span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::holster_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">bq</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure box_quotation is accessed in 3/uo and here.</li></ul>
<ul class="endnotetexts"><li>The structure box_quotation is accessed in 3/uo, 5/lp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The box functions are then compiled in due course by the following agent
(see <a href="../core-module/1-htc.html" class="internal">How To Compile (in core)</a>). The reason they weren't simply compiled earlier
is that a function was already being compiled at the time, and you can't

View file

@ -232,7 +232,7 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
@ -245,17 +245,8 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.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">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><a href="2-hrr.html#SP11" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTINBASE_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTNUMBER_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.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">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Print the value itself</span><span class="named-paragraph-number">4.1.1.3.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">lp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_signed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
@ -279,23 +270,43 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.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">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><a href="2-hrr.html#SP11" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTINBASE_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTNUMBER_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.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">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Print the value itself</span><span class="named-paragraph-number">4.1.1.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ec</span><span class="plain-syntax">++;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1">&#167;4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_1" class="paragraph-anchor"></a><b>&#167;4.1.1.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_1" class="paragraph-anchor"></a><b>&#167;4.1.1.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print the value itself</span><span class="named-paragraph-number">4.1.1.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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LiteralPatterns::element_value_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">values</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><a href="5-lp.html#SP7" class="function-link"><span class="function-syntax">RTLiteralPatterns::values_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">values</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">source</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed without offset</span><span class="named-paragraph-number">4.1.1.3.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> == </span><span class="constant-syntax">10</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">digits_text</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTNUMBER_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::call</span></a><span class="plain-syntax">(</span><a href="2-hrr.html#SP11" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTINBASE_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">number_base</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">digits_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="5-lp.html#SP7" class="function-link"><span class="function-syntax">RTLiteralPatterns::digits_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">digits_text</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">&#167;4.1.1.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_2" class="paragraph-anchor"></a><b>&#167;4.1.1.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Print leading zeros</span><span class="named-paragraph-number">4.1.1.3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -316,7 +327,7 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">pow</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
@ -331,7 +342,7 @@ the first function appears.)
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">&#167;4.1.1.3</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_2" class="paragraph-anchor"></a><b>&#167;4.1.1.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_3" class="paragraph-anchor"></a><b>&#167;4.1.1.3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -357,7 +368,26 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">&#167;4.1.1.3</a> (three times), <a href="5-lp.html#SP4_1_1_3_1">&#167;4.1.1.3.1</a>, <a href="5-lp.html#SP4_1_1_4">&#167;4.1.1.4</a> (twice).</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">&#167;4.1.1.3</a>, <a href="5-lp.html#SP4_1_1_3_1">&#167;4.1.1.3.1</a> (twice), <a href="5-lp.html#SP4_1_1_3_2">&#167;4.1.1.3.2</a>, <a href="5-lp.html#SP4_1_1_4">&#167;4.1.1.4</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_3_1_1" class="paragraph-anchor"></a><b>&#167;4.1.1.3.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Evaluate LPE value to be printed without offset</span><span class="named-paragraph-number">4.1.1.3.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MODULO_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</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">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element_range</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3_1">&#167;4.1.1.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1_4" class="paragraph-anchor"></a><b>&#167;4.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Truncate the printed form here if subsequent numerical parts are zero</span><span class="named-paragraph-number">4.1.1.4</span></span><span class="comment-syntax"> =</span>
</p>
@ -369,7 +399,7 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
@ -382,7 +412,7 @@ the first function appears.)
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
@ -1710,6 +1740,118 @@ the sorting measure.
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</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="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Dealing with non-standard digits.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">DIGIT_PRINTER_NSDF</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VALUES_PRINTER_NSDF</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">digits_iname_D</span><span class="plain-syntax">[4] = { </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTLiteralPatterns::digits_iname</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">RTLiteralPatterns::digits_iname</span></span>:<br/><a href="5-lp.html#SP4_1_1_3_1">&#167;4.1.1.3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-lp.html#SP7" class="function-link"><span class="function-syntax">RTLiteralPatterns::digits_iname_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="constant-syntax">DIGIT_PRINTER_NSDF</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">RTLiteralPatterns::values_iname</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">RTLiteralPatterns::values_iname</span></span>:<br/><a href="5-lp.html#SP4_1_1_3_1">&#167;4.1.1.3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-lp.html#SP7" class="function-link"><span class="function-syntax">RTLiteralPatterns::digits_iname_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="constant-syntax">VALUES_PRINTER_NSDF</span><span class="plain-syntax">);</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">digit_manager</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">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">function_iname</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">category</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">digit_manager</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTLiteralPatterns::digits_iname_inner</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">digits_iname_D</span><span class="plain-syntax">[</span><span class="identifier-syntax">cat</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">digits_iname_D</span><span class="plain-syntax">[</span><span class="identifier-syntax">cat</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(16, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">digits_iname_D</span><span class="plain-syntax">[</span><span class="identifier-syntax">cat</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</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><span class="identifier-syntax">HierarchyLocations::attach_new_package</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::current_enclosure</span></a><span class="plain-syntax">(), </span><span class="constant-syntax">DIGIT_MANAGERS_HAP</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">iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DIGIT_MANAGER_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="string-syntax">"digit manager for &lt;%S&gt; cat %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">cat</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">digit_manager</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">digit_manager</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cat</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Sequence::queue</span><span class="plain-syntax">(&amp;</span><a href="5-lp.html#SP7" class="function-link"><span class="function-syntax">RTLiteralPatterns::dm_agent</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_digit_manager</span><span class="plain-syntax">(</span><span class="identifier-syntax">dm</span><span class="plain-syntax">), </span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::write_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">iname</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">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">RTLiteralPatterns::dm_agent</span><span class="plain-syntax">(</span><span class="identifier-syntax">compilation_subtask</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">digit_manager</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_digit_manager</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Functions::begin</span><span class="plain-syntax">(</span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::new_other_as_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"value"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">category</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DIGIT_PRINTER_NSDF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Compile the body of a digit-printer function</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">VALUES_PRINTER_NSDF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Compile the body of a value-printer function</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Functions::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure digit_manager is accessed in 4/bq and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the body of a digit-printer function</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">SWITCH_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><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">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text</span><span class="plain-syntax">); </span><span class="identifier-syntax">c</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTCHAR_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP15" class="function-link"><span class="function-syntax">EmitCode::rtrue</span></a><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the body of a value-printer function</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">SWITCH_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">literal_pattern_element_value_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LiteralPatterns::parse_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">dm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text</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">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">LiteralPatterns::element_value_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">set</span><span class="plain-syntax">); </span><span class="identifier-syntax">c</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">LiteralPatterns::element_value_equivalent</span><span class="plain-syntax">(</span><span class="identifier-syntax">set</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LiteralPatterns::element_value_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">set</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-ec.html#SP15" class="function-link"><span class="function-syntax">EmitCode::rtrue</span></a><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP7">&#167;7</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-rlt.html">&#10094;</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-gm.html">3</a></li><li class="progresschapter"><a href="4-enc.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-act.html">act</a></li><li class="progresssection"><a href="5-adj.html">adj</a></li><li class="progresssection"><a href="5-chr.html">chr</a></li><li class="progresssection"><a href="5-cnj.html">cnj</a></li><li class="progresssection"><a href="5-eqt.html">eqt</a></li><li class="progresssection"><a href="5-ins.html">ins</a></li><li class="progresssection"><a href="5-bi.html">bi</a></li><li class="progresssection"><a href="5-di.html">di</a></li><li class="progresssection"><a href="5-ri.html">ri</a></li><li class="progresssection"><a href="5-si.html">si</a></li><li class="progresssection"><a href="5-mlt.html">mlt</a></li><li class="progresssection"><a href="5-tbl.html">tbl</a></li><li class="progresssection"><a href="5-tc.html">tc</a></li><li class="progresssection"><a href="5-dbi.html">dbi</a></li><li class="progresssection"><a href="5-dli.html">dli</a></li><li class="progresssection"><a href="5-dci.html">dci</a></li><li class="progresssection"><a href="5-rls.html">rls</a></li><li class="progresssection"><a href="5-rlb.html">rlb</a></li><li class="progresssection"><a href="5-vrb.html">vrb</a></li><li class="progresssection"><a href="5-prp.html">prp</a></li><li class="progresssection"><a href="5-rlt.html">rlt</a></li><li class="progresscurrent">lp</li><li class="progresssection"><a href="5-kc.html">kc</a></li><li class="progresssection"><a href="5-ki.html">ki</a></li><li class="progresssection"><a href="5-act2.html">act2</a></li><li class="progresssection"><a href="5-nap.html">nap</a></li><li class="progresssection"><a href="5-ts.html">ts</a></li><li class="progresschapter"><a href="6-bd.html">6</a></li><li class="progresschapter"><a href="7-cg.html">7</a></li><li class="progressnext"><a href="5-kc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -69,6 +69,7 @@ which use this module:
<span class="definition-keyword">enum</span> <span class="constant-syntax">VARIABLE_CREATIONS_DA</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TABLES_DA</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">UNICODE_DATA_MREASON</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LITERAL_PATTERN_MREASON</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *, </span><span class="identifier-syntax">Instances::log</span><span class="plain-syntax">)</span>
@ -86,6 +87,7 @@ which use this module:
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_CREATIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"variable creations"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">TABLES_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"table construction"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">UNICODE_DATA_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"Unicode data"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">LITERAL_PATTERN_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"Literal pattern storage"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'O'</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::log</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'q'</span><span class="plain-syntax">, </span><span class="identifier-syntax">Equations::log</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'Z'</span><span class="plain-syntax">, </span><span class="identifier-syntax">NonlocalVariables::log</span><span class="plain-syntax">);</span>

View file

@ -234,7 +234,7 @@ perhaps 24000, and the following turns that into an rvalue:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_encoded_notation</span></span>:<br/>Literal Patterns - <a href="3-lp.html#SP32">&#167;32</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">encoded_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_encoded_notation</span></span>:<br/>Literal Patterns - <a href="3-lp.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">encoded_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -242,7 +242,7 @@ perhaps 24000, and the following turns that into an rvalue:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_encoded_notation</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Literal Patterns - <a href="3-lp.html#SP25_2">&#167;25.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_encoded_notation</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Literal Patterns - <a href="3-lp.html#SP26_2">&#167;26.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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">constant_number_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
@ -442,7 +442,7 @@ in the proposition.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span></span>:<br/><a href="2-rvl.html#SP3">&#167;3</a>, <a href="2-rvl.html#SP11">&#167;11</a>, <a href="2-rvl.html#SP12">&#167;12</a>, <a href="2-rvl.html#SP13">&#167;13</a>, <a href="2-rvl.html#SP14">&#167;14</a><br/>Literal Patterns - <a href="3-lp.html#SP25_2">&#167;25.2</a><br/>Enter the S-Parser - <a href="4-ets.html#SP11">&#167;11</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.html#SP5">&#167;5</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a><br/>Conditions and Phrases - <a href="4-cap.html#SP10_1">&#167;10.1</a><br/>Dash - <a href="5-dsh.html#SP16">&#167;16</a>, <a href="5-dsh.html#SP18_5_2">&#167;18.5.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span></span>:<br/><a href="2-rvl.html#SP3">&#167;3</a>, <a href="2-rvl.html#SP11">&#167;11</a>, <a href="2-rvl.html#SP12">&#167;12</a>, <a href="2-rvl.html#SP13">&#167;13</a>, <a href="2-rvl.html#SP14">&#167;14</a><br/>Literal Patterns - <a href="3-lp.html#SP26_2">&#167;26.2</a><br/>Enter the S-Parser - <a href="4-ets.html#SP11">&#167;11</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.html#SP5">&#167;5</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a><br/>Conditions and Phrases - <a href="4-cap.html#SP10_1">&#167;10.1</a><br/>Dash - <a href="5-dsh.html#SP16">&#167;16</a>, <a href="5-dsh.html#SP18_5_2">&#167;18.5.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">), </span><span class="identifier-syntax">K</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -560,7 +560,7 @@ doesn't need to be especially rapid.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_kind</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_kind</span></span>:<br/>Specifications - <a href="2-spc.html#SP1">&#167;1</a><br/>Lvalues - <a href="2-lvl.html#SP12">&#167;12</a><br/>Literal Patterns - <a href="3-lp.html#SP25_3">&#167;25.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_kind</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_kind</span></span>:<br/>Specifications - <a href="2-spc.html#SP1">&#167;1</a><br/>Lvalues - <a href="2-lvl.html#SP12">&#167;12</a><br/>Literal Patterns - <a href="3-lp.html#SP26_3">&#167;26.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Rvalues::to_kind on NULL"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_NT:</span>

File diff suppressed because it is too large Load diff

View file

@ -194,7 +194,7 @@ misses out.
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LiteralReals::ismultiplicationsign</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">LiteralReals::ismultiplicationsign</span></span>:<br/><a href="3-lrn.html#SP1_4">&#167;1.4</a><br/>Literal Patterns - <a href="3-lp.html#SP16_1_3_2">&#167;16.1.3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LiteralReals::ismultiplicationsign</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">LiteralReals::ismultiplicationsign</span></span>:<br/><a href="3-lrn.html#SP1_4">&#167;1.4</a><br/>Literal Patterns - <a href="3-lp.html#SP17_1_3_2">&#167;17.1.3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'x'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'*'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -211,7 +211,7 @@ a zero value. If any of the inputs are NaN, this returns NaN.
</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">LiteralReals::construct_float</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">LiteralReals::construct_float</span></span>:<br/><a href="3-lrn.html#SP1">&#167;1</a><br/>Literal Patterns - <a href="3-lp.html#SP16_1_3_2">&#167;16.1.3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">signbit</span><span class="plain-syntax">, </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">intv</span><span class="plain-syntax">, </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">fracv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">expo</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LiteralReals::construct_float</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">LiteralReals::construct_float</span></span>:<br/><a href="3-lrn.html#SP1">&#167;1</a><br/>Literal Patterns - <a href="3-lp.html#SP17_1_3_2">&#167;17.1.3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">signbit</span><span class="plain-syntax">, </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">intv</span><span class="plain-syntax">, </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">fracv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">expo</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">double</span><span class="plain-syntax"> </span><span class="identifier-syntax">absval</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">intv</span><span class="plain-syntax"> + </span><span class="identifier-syntax">fracv</span><span class="plain-syntax">) * </span><a href="3-lrn.html#SP4" class="function-link"><span class="function-syntax">LiteralReals::ten_to_the</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">expo</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">sign</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">signbit</span><span class="plain-syntax"> ? ((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="constant-syntax">0x80000000</span><span class="plain-syntax">) : </span><span class="constant-syntax">0x0</span><span class="plain-syntax">);</span>

View file

@ -1,7 +1,7 @@
Size of lexicon: 3163 excerpt meanings
Stored among 856 words out of total vocabulary of 10784
720 words have a start list: longest belongs to report (with 293 meanings)
21 words have an end list: longest belongs to digit (with 7 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)

View file

@ -6488,6 +6488,10 @@
constraint DS = {11, 13} extremes [3, 4]
<cardinal-number> digit/digits
constraint DS = {13} extremes [2, 2]
digits {<quoted-text>}
constraint DS = {13} extremes [2, 2]
values {<quoted-text>}
constraint DS = {13} extremes [2, 2]
{......}
constraint (none) extremes [1, infinity)

View file

@ -1,6 +1,6 @@
Total memory consumption was 138261K = 135 MB
Total memory consumption was 138263K = 135 MB
---- was used for 2115191 objects, in 374469 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2115201 objects, in 374479 frames in 0 x 800K = 0K = 0 MB:
30.5% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
19.1% text_stream_array 4813 x 100 = 481300 objects, 27106816 bytes
@ -28,8 +28,8 @@ Total memory consumption was 138261K = 135 MB
0.7% adjective_meaning 208 objects, 1030016 bytes
0.7% inter_schema_node 9070 objects, 1015840 bytes
0.6% excerpt_meaning 3163 objects, 986856 bytes
0.6% production 3998 objects, 927536 bytes
0.6% ptoken 8693 objects, 904072 bytes
0.6% production 4000 objects, 928000 bytes
0.6% ptoken 8697 objects, 904488 bytes
0.6% grammatical_usage 3649 objects, 875760 bytes
0.6% individual_form 2582 objects, 867552 bytes
0.4% unary_predicate_array 17 x 1000 = 17000 objects, 680544 bytes
@ -44,7 +44,7 @@ Total memory consumption was 138261K = 135 MB
0.1% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.1% vanilla_function 3807 objects, 243648 bytes
0.1% binary_predicate 330 objects, 174240 bytes
0.1% hierarchy_location 1188 objects, 171072 bytes
0.1% hierarchy_location 1189 objects, 171216 bytes
0.1% linguistic_stock_item 3339 objects, 160272 bytes
0.1% rule_family_data 404 objects, 148672 bytes
0.1% nonterminal 779 objects, 143336 bytes
@ -56,7 +56,7 @@ Total memory consumption was 138261K = 135 MB
---- imperative_defn 1415 objects, 101880 bytes
---- noun_usage 2420 objects, 96800 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- inter_tree 7 objects, 95760 bytes
---- inter_tree 7 objects, 95872 bytes
---- preposition 274 objects, 87680 bytes
---- lexical_cluster 2536 objects, 81152 bytes
---- kind_variable_declaration 1656 objects, 79488 bytes
@ -81,8 +81,8 @@ Total memory consumption was 138261K = 135 MB
---- heading 212 objects, 47488 bytes
---- text_substitution 438 objects, 42048 bytes
---- to_family_data 525 objects, 42000 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 677 objects, 37912 bytes
---- production_list 633 objects, 35448 bytes
@ -127,7 +127,7 @@ Total memory consumption was 138261K = 135 MB
---- determiner 22 objects, 7216 bytes
---- inbuild_copy 59 objects, 7080 bytes
---- verb 109 objects, 6976 bytes
---- hierarchy_attachment_point 77 objects, 6776 bytes
---- hierarchy_attachment_point 78 objects, 6864 bytes
---- text_literal_holder 164 objects, 6560 bytes
---- inbuild_edition 85 objects, 6120 bytes
---- section_md 62 objects, 5952 bytes
@ -143,7 +143,7 @@ Total memory consumption was 138261K = 135 MB
---- semver_range 42 objects, 4368 bytes
---- use_option 32 objects, 4352 bytes
---- either_or_property_data 62 objects, 3968 bytes
---- parse_node_annotation_type 121 objects, 3872 bytes
---- parse_node_annotation_type 123 objects, 3936 bytes
---- method_set 108 objects, 3456 bytes
---- definition 48 objects, 3456 bytes
---- property_setting_bp_data 86 objects, 3440 bytes
@ -192,10 +192,10 @@ Total memory consumption was 138261K = 135 MB
---- implication 13 objects, 624 bytes
---- chapter_md 7 objects, 616 bytes
---- code_generation 1 object, 576 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- module 7 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- inter_annotation_form 14 objects, 560 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- generated_segment 14 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- i6_memory_setting 15 objects, 480 bytes
@ -205,23 +205,23 @@ Total memory consumption was 138261K = 135 MB
---- inference_family 11 objects, 440 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- tree_inventory 1 object, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- tree_inventory 1 object, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- up_family 9 objects, 288 bytes
---- compilation_unit 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- kit_dependency 5 objects, 240 bytes
---- compilation_unit 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- kit_dependency 5 objects, 240 bytes
---- inform_project 1 object, 232 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- local_block_value 4 objects, 224 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- attachment_instruction 5 objects, 200 bytes
@ -229,29 +229,29 @@ Total memory consumption was 138261K = 135 MB
---- code_generator 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- element_activation 6 objects, 192 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_language 1 object, 104 bytes
---- group_together_function 2 objects, 80 bytes
---- article 2 objects, 80 bytes
---- group_together_function 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- inter_warehouse 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- star_invention 1 object, 48 bytes
---- build_methodology 1 object, 56 bytes
---- inform_kit_ittt 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- loop_over_scope 1 object, 40 bytes
---- target_pragma_setting 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- I6_generation_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
99.9% was used for memory not allocated for objects:
100.0% was used for memory not allocated for objects:
62.0% text stream storage 87819516 bytes in 501564 claims
62.0% text stream storage 87820684 bytes in 501576 claims
3.7% dictionary storage 5378048 bytes in 7752 claims
---- sorting 2616 bytes in 531 claims
5.0% source text 7200000 bytes in 3 claims
@ -269,5 +269,5 @@ Total memory consumption was 138261K = 135 MB
---- code generation workspace for objects 3488 bytes in 19 claims
0.1% emitter array storage 281184 bytes in 2006 claims
-137.-4% was overhead - -194581720 bytes = -190021K = -185 MB
-137.-4% was overhead - -194583008 bytes = -190022K = -185 MB

View file

@ -1,29 +1,29 @@
100.0% in inform7 run
67.9% in compilation to Inter
45.0% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass//
67.5% in compilation to Inter
44.7% in //Sequence::undertake_queued_tasks//
5.0% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all//
1.9% in //RTPhrasebook::compile_entries//
1.5% in //RTKindConstructors::compile//
1.1% in //Sequence::lint_inter//
0.7% in //Sequence::undertake_queued_tasks//
0.3% in //CompletionModule::compile//
0.3% in //ImperativeDefinitions::compile_first_block//
0.3% in //InferenceSubjects::emit_all//
0.3% in //MajorNodes::pass_2//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //Sequence::undertake_queued_tasks//
0.3% in //World::stage_V//
5.0% not specifically accounted for
28.2% in running Inter pipeline
9.5% in step 14/15: generate inform6 -> auto.inf
7.2% in step 5/15: load-binary-kits
6.1% in step 6/15: make-synoptic-module
28.1% in running Inter pipeline
9.6% in step 14/15: generate inform6 -> auto.inf
6.9% in step 5/15: load-binary-kits
5.7% in step 6/15: make-synoptic-module
1.9% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
1.9% not specifically accounted for
2.3% not specifically accounted for
3.4% in supervisor
0.4% not specifically accounted for
0.8% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture16Kit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"compatibility": "16-bit",
"kit-details": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "Architecture32Kit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"compatibility": "32-bit",
"kit-details": {

View file

@ -273,11 +273,11 @@ For example, -1 prints as FFFFFFFF in hex, either -1 or 4294967285 in decimal,
in base 3 and 1Z141Y3 in base 36.
=
[ PrintInBase n base digits a digit_count j k d;
[ PrintInBase n base digits digitset a digit_count j k d;
if ((base < 2) || (base > 36)) { print "(", n, " in base ", base, ")"; return; }
if (digits < 1) digits = 0;
if (digits > 100) digits = 100;
if ((base == 10) && (digits == 0)) { print n; return; }
if ((base == 10) && (digits == 0) && (digitset == 0)) { print n; return; }
if (n == 0) {
digit_count = 1;
} else {
@ -288,11 +288,18 @@ in base 3 and 1Z141Y3 in base 36.
digit_count++;
} until (a == 0);
}
for (j = digits: j > digit_count: j--) print "0";
for (j = digits: j > digit_count: j--) {
if (digitset) digitset(0);
else print "0";
}
for (j = digit_count: j >= 1: j--) {
a = n; for (k = 1: k < j: k++) a = DropDigit(a, base);
d = LeastDigit(a, base);
if (d < 10) print d; else print (char) 'A' + d - 10;
if (digitset) digitset(d);
else {
if (d < 10) print d;
else print (char) 'A' + d - 10;
}
}
];

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "CommandParserKit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "EnglishLanguageKit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"needs": [ {
"need": {

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "WorldModelKit",
"version": "10.2.0-beta+6W81"
"version": "10.2.0-beta+6W82"
},
"needs": [ {
"need": {

View file

@ -284,7 +284,7 @@ by a bracketed list of up to three options in any order.
<lp-part> ==> { 0, RP[1] }
<lp-part> ::=
<np-unparsed-bal> ( <lp-part-option-list> ) | ==> { 0, LPRequests::mark(RP[1], R[2], <<min_part_val>>, <<max_part_val>>) }
<np-unparsed-bal> ( <lp-part-option-list> ) | ==> { 0, LPRequests::mark(RP[1], R[2], <<min_part_val>>, <<max_part_val>>, <<digits_wd_val>>, <<values_wd_val>>) }
<np-unparsed-bal> ==> { 0, RP[1] }
<lp-part-option-list> ::=
@ -306,6 +306,8 @@ by a bracketed list of up to three options in any order.
up to <cardinal-number> digit/digits | ==> @<Apply max digit count@>;
<cardinal-number> <number-base> digit/digits | ==> @<Apply based digit count@>;
<cardinal-number> digit/digits | ==> @<Apply digit count@>;
digits { <quoted-text> } | ==> <<digits_wd_val>> = Wordings::first_wn(WR[1]); @<Apply digits text@>;
values { <quoted-text> } | ==> <<values_wd_val>> = Wordings::first_wn(WR[1]); @<Apply values text@>;
...... ==> @<Issue PM_BadLPPartOption problem@>
@<Apply range@> =
@ -343,6 +345,12 @@ by a bracketed list of up to three options in any order.
"for obvious reasons.");
==> { MAX_DIGITS_LSO*R[1] + MIN_DIGITS_LSO*R[1] + BASE_LSO*R[2] + WITH_LEADING_ZEROS_LSO, - };
@<Apply digits text@> =
==> { DIGITS_TEXT_LSO, - };
@<Apply values text@> =
==> { VALUES_TEXT_LSO, - };
@<Issue PM_BadLPPartOption problem@> =
if (preform_lookahead_mode == FALSE) {
Problems::quote_source(1, current_sentence);
@ -371,6 +379,8 @@ literal_pattern_name *LPRequests::compose(literal_pattern_name *A, literal_patte
@d WITHOUT_LEADING_ZEROS_LSO 0x00000008
@d MAXIMUM_LSO 0x00000010
@d MINIMUM_LSO 0x00000020
@d DIGITS_TEXT_LSO 0x00000040
@d VALUES_TEXT_LSO 0x00000080
@d BASE_LSO 0x00000100
@d BASE_MASK_LSO 0x0000ff00
@d MIN_DIGITS_LSO 0x00010000
@ -379,11 +389,13 @@ literal_pattern_name *LPRequests::compose(literal_pattern_name *A, literal_patte
@d MAX_DIGITS_MASK_LSO 0x7f000000
=
parse_node *LPRequests::mark(parse_node *A, int N, int MI, int MA) {
parse_node *LPRequests::mark(parse_node *A, int N, int MI, int MA, int DT, int VT) {
if (A) {
Annotations::write_int(A, lpe_options_ANNOT, N);
if (N & MINIMUM_LSO) Annotations::write_int(A, lpe_min_ANNOT, MI);
if (N & MAXIMUM_LSO) Annotations::write_int(A, lpe_max_ANNOT, MA);
if (N & DIGITS_TEXT_LSO) Annotations::write_int(A, lpe_digits_ANNOT, DT);
if (N & VALUES_TEXT_LSO) Annotations::write_int(A, lpe_values_ANNOT, VT);
}
return A;
}

View file

@ -99,6 +99,8 @@ DECLARE_CLASS(use_option)
@e literal_list_CLASS
@e literal_pattern_CLASS
@e literal_pattern_name_CLASS
@e literal_pattern_element_value_set_CLASS
@e literal_pattern_element_value_pair_CLASS
@e llist_entry_CLASS
@e nonlocal_variable_CLASS
@e response_message_CLASS
@ -114,6 +116,8 @@ DECLARE_CLASS(inv_token_problem_token)
DECLARE_CLASS(literal_list)
DECLARE_CLASS(literal_pattern)
DECLARE_CLASS(literal_pattern_name)
DECLARE_CLASS(literal_pattern_element_value_set)
DECLARE_CLASS(literal_pattern_element_value_pair)
DECLARE_CLASS(llist_entry)
DECLARE_CLASS(nonlocal_variable)
DECLARE_CLASS(response_message)

View file

@ -418,6 +418,8 @@ void CoreSyntax::grant_L2_permissions(void) {
@e lpe_options_ANNOT /* |int|: options set for a literal pattern part */
@e lpe_min_ANNOT /* |int|: value offset for a literal pattern part */
@e lpe_max_ANNOT /* |int|: maximum value for a literal pattern part */
@e lpe_digits_ANNOT /* |int|: word number of digits text for a literal pattern part */
@e lpe_values_ANNOT /* |int|: word number of values text for a literal pattern part */
@e multiplicity_ANNOT /* |int|: e.g., 5 for "five gold rings" */
@e new_relation_here_ANNOT /* |binary_predicate|: new relation as subject of "relates" sentence */
@e nowhere_ANNOT /* |int|: used by the spatial feature to show this represents "nowhere" */
@ -469,6 +471,10 @@ void CoreSyntax::declare_L3_annotations(void) {
lpe_max_ANNOT, CoreSyntax::write_lpe_max_ANNOT);
Annotations::declare_type(
lpe_min_ANNOT, CoreSyntax::write_lpe_min_ANNOT);
Annotations::declare_type(
lpe_digits_ANNOT, CoreSyntax::write_lpe_digits_ANNOT);
Annotations::declare_type(
lpe_values_ANNOT, CoreSyntax::write_lpe_values_ANNOT);
Annotations::declare_type(
multiplicity_ANNOT, CoreSyntax::write_multiplicity_ANNOT);
Annotations::declare_type(
@ -527,6 +533,12 @@ void CoreSyntax::write_lpe_max_ANNOT(text_stream *OUT, parse_node *p) {
void CoreSyntax::write_lpe_min_ANNOT(text_stream *OUT, parse_node *p) {
WRITE(" {lpe offset: %d}", Annotations::read_int(p, lpe_min_ANNOT));
}
void CoreSyntax::write_lpe_digits_ANNOT(text_stream *OUT, parse_node *p) {
WRITE(" {lpe digits: %W}", Wordings::one_word(Annotations::read_int(p, lpe_digits_ANNOT)));
}
void CoreSyntax::write_lpe_values_ANNOT(text_stream *OUT, parse_node *p) {
WRITE(" {lpe values: %W}", Wordings::one_word(Annotations::read_int(p, lpe_values_ANNOT)));
}
void CoreSyntax::write_multiplicity_ANNOT(text_stream *OUT, parse_node *p) {
if (Annotations::read_int(p, multiplicity_ANNOT))
WRITE(" {multiplicity %d}", Annotations::read_int(p, multiplicity_ANNOT));
@ -604,6 +616,8 @@ void CoreSyntax::grant_L3_permissions(void) {
Annotations::allow(PROPER_NOUN_NT, lpe_options_ANNOT);
Annotations::allow(PROPER_NOUN_NT, lpe_max_ANNOT);
Annotations::allow(PROPER_NOUN_NT, lpe_min_ANNOT);
Annotations::allow(PROPER_NOUN_NT, lpe_digits_ANNOT);
Annotations::allow(PROPER_NOUN_NT, lpe_values_ANNOT);
Annotations::allow(PROPER_NOUN_NT, multiplicity_ANNOT);
Annotations::allow(UNPARSED_NOUN_NT, new_relation_here_ANNOT);
Annotations::allow(PROPER_NOUN_NT, new_relation_here_ANNOT);

View file

@ -31,8 +31,10 @@ void RuntimeModule::end(void) {
@
@e contents_entry_CLASS
@e digit_manager_CLASS
@e mapping_hint_CLASS
=
DECLARE_CLASS(contents_entry)
DECLARE_CLASS(digit_manager)
DECLARE_CLASS(mapping_hint)

View file

@ -1931,6 +1931,8 @@ void Hierarchy::establish(void) {
@e GROUP_TOGETHER_FN_HL
@e LOOPS_OVER_SCOPE_HAP
@e LOOP_OVER_SCOPE_FN_HL
@e DIGIT_MANAGERS_HAP
@e DIGIT_MANAGER_HL
@<Establish enclosed matter@> =
H_BEGIN(LocationRequirements::any_enclosure())
@ -1957,6 +1959,9 @@ void Hierarchy::establish(void) {
H_F_G(LOOP_OVER_SCOPE_FN_HL, I"loop_over_scope_fn", I"LOS")
H_END
H_C_U(RTP_HL, I"rtp")
H_BEGIN_AP(DIGIT_MANAGERS_HAP, I"digit_manager", I"_digit_manager")
H_C_U(DIGIT_MANAGER_HL, I"dm")
H_END
H_END
@

View file

@ -165,16 +165,7 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
EmitCode::up();
}
@<Print leading zeros@>;
if (lpe->number_base != 10) {
EmitCode::call(Hierarchy::find(PRINTINBASE_HL));
} else {
EmitCode::inv(PRINTNUMBER_BIP);
}
EmitCode::down();
@<Evaluate LPE value to be printed@>;
if (lpe->number_base != 10)
EmitCode::val_number((inter_ti) (lpe->number_base));
EmitCode::up();
@<Print the value itself@>;
if (lp->number_signed) {
EmitCode::inv(IF_BIP);
EmitCode::down();
@ -199,20 +190,36 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
}
} else {
@<Print leading zeros@>;
if (lpe->number_base != 10) {
EmitCode::call(Hierarchy::find(PRINTINBASE_HL));
} else {
EmitCode::inv(PRINTNUMBER_BIP);
}
EmitCode::down();
@<Evaluate LPE value to be printed@>;
if (lpe->number_base != 10)
EmitCode::val_number((inter_ti) (lpe->number_base));
EmitCode::up();
@<Print the value itself@>;
}
}
ec++;
@<Print the value itself@> =
if (LiteralPatterns::element_value_count(lpe->values) > 0) {
EmitCode::call(RTLiteralPatterns::values_iname(lpe->values->source));
EmitCode::down();
@<Evaluate LPE value to be printed without offset@>;
EmitCode::up();
} else {
if ((lpe->number_base == 10) && (Str::len(lpe->digits_text) == 0)) {
EmitCode::inv(PRINTNUMBER_BIP);
EmitCode::down();
@<Evaluate LPE value to be printed@>;
EmitCode::up();
} else {
EmitCode::call(Hierarchy::find(PRINTINBASE_HL));
EmitCode::down();
@<Evaluate LPE value to be printed@>;
EmitCode::val_number((inter_ti) (lpe->number_base));
EmitCode::val_number(0);
if (Str::len(lpe->digits_text) > 0)
EmitCode::val_iname(K_value,
RTLiteralPatterns::digits_iname(lpe->digits_text));
EmitCode::up();
}
}
@<Print leading zeros@> =
if (lpe->print_with_leading_zeros) {
int max_printable = lpe->element_range + lpe->element_offset;
@ -268,6 +275,21 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
EmitCode::up();
}
@<Evaluate LPE value to be printed without offset@> =
if (lpe->element_range >= 0) {
EmitCode::inv(MODULO_BIP);
EmitCode::down();
}
EmitCode::inv(DIVIDE_BIP);
EmitCode::down();
EmitCode::val_symbol(K_value, value_s);
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
EmitCode::up();
if (lpe->element_range >= 0) {
EmitCode::val_number((inter_ti) (lpe->element_range));
EmitCode::up();
}
@<Truncate the printed form here if subsequent numerical parts are zero@> =
if (oc == ec) {
literal_pattern_element *lpe = &(lp->lp_elements[ec]);
@ -1565,3 +1587,106 @@ void RTLiteralPatterns::comment_use_of_lp(literal_pattern *lp) {
EmitCode::comment(W);
DISCARD_TEXT(W)
}
@ Dealing with non-standard digits.
@e DIGIT_PRINTER_NSDF from 1
@e VALUES_PRINTER_NSDF
=
dictionary *digits_iname_D[4] = { NULL, NULL, NULL, NULL };
inter_name *RTLiteralPatterns::digits_iname(text_stream *text) {
return RTLiteralPatterns::digits_iname_inner(text, DIGIT_PRINTER_NSDF);
}
inter_name *RTLiteralPatterns::values_iname(text_stream *text) {
return RTLiteralPatterns::digits_iname_inner(text, VALUES_PRINTER_NSDF);
}
typedef struct digit_manager {
struct inter_name *function_iname;
struct text_stream *text;
int category;
CLASS_DEFINITION
} digit_manager;
inter_name *RTLiteralPatterns::digits_iname_inner(text_stream *text, int cat) {
if (digits_iname_D[cat] == NULL)
digits_iname_D[cat] = Dictionaries::new(16, FALSE);
dictionary *D = digits_iname_D[cat];
if (Dictionaries::find(D, text))
return Dictionaries::read_value(D, text);
package_request *PR = HierarchyLocations::attach_new_package(
Emit::tree(), NULL, Emit::current_enclosure(), DIGIT_MANAGERS_HAP);
inter_name *iname = Hierarchy::make_iname_in(DIGIT_MANAGER_HL, PR);
text_stream *desc = Str::new();
WRITE_TO(desc, "digit manager for <%S> cat %d", text, cat);
digit_manager *dm = CREATE(digit_manager);
dm->function_iname = iname;
dm->text = Str::duplicate(text);
dm->category = cat;
Sequence::queue(&RTLiteralPatterns::dm_agent, STORE_POINTER_digit_manager(dm), desc);
Dictionaries::create(D, text);
Dictionaries::write_value(D, text, iname);
return iname;
}
void RTLiteralPatterns::dm_agent(compilation_subtask *t) {
digit_manager *dm = RETRIEVE_POINTER_digit_manager(t->data);
packaging_state save = Functions::begin(dm->function_iname);
inter_symbol *value_s = LocalVariables::new_other_as_symbol(I"value");
switch (dm->category) {
case DIGIT_PRINTER_NSDF: @<Compile the body of a digit-printer function@>; break;
case VALUES_PRINTER_NSDF: @<Compile the body of a value-printer function@>; break;
}
Functions::end(save);
}
@<Compile the body of a digit-printer function@> =
EmitCode::inv(SWITCH_BIP);
EmitCode::down();
EmitCode::val_symbol(K_value, value_s);
EmitCode::code();
EmitCode::down();
for (int c = 0; c < Str::len(dm->text); c++) {
EmitCode::inv(CASE_BIP);
EmitCode::down();
EmitCode::val_number((inter_ti) c);
EmitCode::code();
EmitCode::down();
EmitCode::inv(PRINTCHAR_BIP);
EmitCode::down();
EmitCode::val_number((inter_ti) Str::get_at(dm->text, c));
EmitCode::up();
EmitCode::up();
EmitCode::up();
}
EmitCode::up();
EmitCode::up();
EmitCode::rtrue();
@<Compile the body of a value-printer function@> =
EmitCode::inv(SWITCH_BIP);
EmitCode::down();
EmitCode::val_symbol(K_value, value_s);
EmitCode::code();
EmitCode::down();
literal_pattern_element_value_set *set = LiteralPatterns::parse_value_set(dm->text);
for (int c = 0; c < LiteralPatterns::element_value_count(set); c++) {
EmitCode::inv(CASE_BIP);
EmitCode::down();
EmitCode::val_number((inter_ti) LiteralPatterns::element_value_equivalent(set, c));
EmitCode::code();
EmitCode::down();
EmitCode::inv(PRINT_BIP);
EmitCode::down();
EmitCode::val_text(LiteralPatterns::element_value_text(set, c));
EmitCode::up();
EmitCode::up();
EmitCode::up();
}
EmitCode::up();
EmitCode::up();
EmitCode::rtrue();

View file

@ -18,6 +18,7 @@ which use this module:
@e VARIABLE_CREATIONS_DA
@e TABLES_DA
@e UNICODE_DATA_MREASON
@e LITERAL_PATTERN_MREASON
=
COMPILE_WRITER(instance *, Instances::log)
@ -35,6 +36,7 @@ void ValuesModule::start(void) {
Log::declare_aspect(VARIABLE_CREATIONS_DA, L"variable creations", FALSE, FALSE);
Log::declare_aspect(TABLES_DA, L"table construction", FALSE, FALSE);
Memory::reason_name(UNICODE_DATA_MREASON, "Unicode data");
Memory::reason_name(LITERAL_PATTERN_MREASON, "Literal pattern storage");
REGISTER_WRITER('O', Instances::log);
REGISTER_WRITER('q', Equations::log);
REGISTER_WRITER('Z', NonlocalVariables::log);

View file

@ -123,10 +123,28 @@ typedef struct literal_pattern_element {
int min_digits; /* when writing this */
int max_digits; /* when writing this */
int number_base; /* e.g., 10 for decimal */
struct text_stream *digits_text; /* what digit characters to use */
struct literal_pattern_element_value_set *values; /* what value texts to use */
int element_optional; /* can we truncate the LP here? */
int preamble_optional; /* if so, can we lose the preamble as well? */
} literal_pattern_element;
@ This is used for sets of textual equivalents to values.
=
typedef struct literal_pattern_element_value_set {
struct text_stream *source;
int extent;
struct literal_pattern_element_value_pair *values;
CLASS_DEFINITION
} literal_pattern_element_value_set;
typedef struct literal_pattern_element_value_pair {
int value_equivalent;
struct text_stream *text_equivalent;
CLASS_DEFINITION
} literal_pattern_element_value_pair;
@ For the sake of printing, we can specify which notation is to be used in
printing a value back. For instance,
@ -200,6 +218,8 @@ literal_pattern_element LiteralPatterns::lpe_new(int i, int r, int sgn) {
lpe.print_with_leading_zeros = FALSE;
lpe.min_digits = 1;
lpe.max_digits = 1000000;
lpe.digits_text = NULL;
lpe.values = NULL;
return lpe;
}
@ -490,16 +510,19 @@ on unusual platforms.
@<Match an integer number element token@> =
long long int tot = 0, max_32_bit, max_16_bit;
int digits_found = 0, point_at = -1;
int digits_found = 0, point_at = -1, len = 0;
max_16_bit = 32767LL; if (sign_used_at) max_16_bit = 32768LL;
max_32_bit = 2147483647LL; if (sign_used_at) max_32_bit = 2147483648LL;
while ((digits_found < lpe->max_digits) &&
((LiteralPatterns::digit_value(wd[wpos], lpe->number_base) >= 0) ||
((LiteralPatterns::digit_value(wd + wpos, lpe->number_base,
lpe->digits_text, lpe->values, NULL) >= 0) ||
((wd[wpos] == '.') &&
(Kinds::Scalings::get_integer_multiplier(lp->scaling) > 1) &&
(point_at == -1)))) {
if (wd[wpos] == '.') { point_at = digits_found; wpos++; continue; }
tot = lpe->number_base*tot + LiteralPatterns::digit_value(wd[wpos++], lpe->number_base);
tot = lpe->number_base*tot + LiteralPatterns::digit_value(wd + wpos,
lpe->number_base, lpe->digits_text, lpe->values, &len);
wpos += len;
if (tot > max_16_bit) overflow_16_bit_flag = TRUE;
if (tot > max_32_bit) overflow_32_bit_flag = TRUE;
digits_found++;
@ -665,20 +688,54 @@ which is annoying. So we have a mechanism to suppress duplicates:
@ A digit value in a given LPE:
=
int LiteralPatterns::digit_value(wchar_t c, int base) {
int r = -1;
int d = ((int) c - (int) '0');
if ((d >= 0) && (d < 10)) r = d;
else {
d = ((int) c - (int) 'a');
if ((d >= 0) && (d < 26)) r = d + 10;
else {
d = ((int) c - (int) 'A');
if ((d >= 0) && (d < 26)) r = d + 10; else return -1;
int LiteralPatterns::simple_digit_value(wchar_t *p, int base) {
return LiteralPatterns::digit_value(p, base, NULL, NULL, NULL);
}
int LiteralPatterns::digit_value(wchar_t *p, int base, text_stream *digits,
literal_pattern_element_value_set *set, int *len) {
if (set) {
for (int i=0; i<LiteralPatterns::element_value_count(set); i++) {
text_stream *match = LiteralPatterns::element_value_text(set, i);
int fail = FALSE;
for (int j=0; j<Str::len(match); j++)
if (Characters::tolower(Str::get_at(match, j)) != Characters::tolower(p[j])) {
fail = TRUE;
break;
}
if (fail == FALSE) {
if (len) *len = Str::len(match);
return LiteralPatterns::element_value_equivalent(set, i) + 1;
}
}
return -1;
} else if (Str::len(digits) == 0) {
wchar_t c = p[0];
int r = -1;
int d = ((int) c - (int) '0');
if ((d >= 0) && (d < 10)) r = d;
else {
d = ((int) c - (int) 'a');
if ((d >= 0) && (d < 26)) r = d + 10;
else {
d = ((int) c - (int) 'A');
if ((d >= 0) && (d < 26)) r = d + 10; else return -1;
}
}
if ((r >= 0) && (r < base)) {
if (len) *len = 1;
return r;
}
return -1;
} else {
wchar_t c = p[0];
if (c)
for (int i=0; i<base; i++)
if (Str::get_at(digits, i) == c) {
if (len) *len = 1;
return i;
}
return -1;
}
if ((r >= 0) && (r < base)) return r;
return -1;
}
@h Indexing literal patterns for a given kind.
@ -1001,7 +1058,6 @@ literal_pattern *LiteralPatterns::new_literal_specification_inner(lp_specificati
"before the current one.");
}
}
if (lps->offset_value) {
if (Rvalues::is_CONSTANT_of_kind(lps->offset_value, K)) {
offset = Rvalues::to_encoded_notation(lps->offset_value);
@ -1241,7 +1297,7 @@ character ones.
if (i == Wordings::length(NW)-1) finish_at = to.char_pos;
int digit_found = FALSE;
for (int j=start_from; j<=finish_at; j++)
if (LiteralPatterns::digit_value(text_of_word[j], lp->number_base) >= 0)
if (LiteralPatterns::simple_digit_value(text_of_word + j, lp->number_base) >= 0)
digit_found = TRUE;
if ((digit_found) || (start_from != 0) || (finish_at != Wide::len(text_of_word)-1))
@<Break up the word into at least one element token, and perhaps also character tokens@>
@ -1263,11 +1319,11 @@ hold -- so we need not fool around with long long ints.
for (int j=start_from; j<=finish_at; j++) {
int tot = 0, digit_found = FALSE, point_found = FALSE;
if ((text_of_word[j] == '-') &&
(LiteralPatterns::digit_value(text_of_word[j+1], base) >= 0) &&
(LiteralPatterns::simple_digit_value(text_of_word+j+1, base) >= 0) &&
(ec == 0)) {
sgn = -1; continue;
}
while (LiteralPatterns::digit_value(text_of_word[j++], base) >= 0) {
while (LiteralPatterns::simple_digit_value(text_of_word+(j++), base) >= 0) {
digit_found = TRUE;
if (tot > 999999999) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_LPElementTooLarge),
@ -1276,7 +1332,7 @@ hold -- so we need not fool around with long long ints.
"be stored at run-time.");
return owner;
}
tot = base*tot + LiteralPatterns::digit_value(text_of_word[j-1], base);
tot = base*tot + LiteralPatterns::simple_digit_value(text_of_word+j-1, base);
}
j--;
if ((text_of_word[j] == '.') && (text_of_word[j+1] == '0') && (ec == 0)) {
@ -1287,11 +1343,13 @@ hold -- so we need not fool around with long long ints.
lp->lp_elements[ec-1].is_real = point_found;
if (point_found) integer_scaling = FALSE;
if (sgn == -1) lp->number_signed = TRUE;
literal_pattern_token new_token = LiteralPatterns::lpt_new(ELEMENT_LPT, next_token_begins_word);
literal_pattern_token new_token =
LiteralPatterns::lpt_new(ELEMENT_LPT, next_token_begins_word);
@<Add new token to LP@>;
j--;
} else {
literal_pattern_token new_token = LiteralPatterns::lpt_new(CHARACTER_LPT, next_token_begins_word);
literal_pattern_token new_token =
LiteralPatterns::lpt_new(CHARACTER_LPT, next_token_begins_word);
new_token.token_char = text_of_word[j];
@<Add new token to LP@>;
}
@ -1393,13 +1451,76 @@ this is deferred until all elements exist, at which point we --
lpe->element_range = n;
}
}
if (O & DIGITS_TEXT_LSO) {
lpe->digits_text = Str::new();
WRITE_TO(lpe->digits_text, "%W", Wordings::one_word(Annotations::read_int(p, lpe_digits_ANNOT)));
Str::delete_first_character(lpe->digits_text);
Str::delete_last_character(lpe->digits_text);
if (Str::len(lpe->digits_text) != lpe->number_base) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"there are the wrong number of digits here",
"since we need one different digit character for each possible "
"value, which will be 0 up to the number base minus 1.");
} else {
for (int i=0; i<lpe->number_base; i++)
for (int j=0; j<lpe->number_base; j++)
if ((i != j) &&
(Str::get_at(lpe->digits_text, i) == Str::get_at(lpe->digits_text, j))) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"the digits here contain duplicates",
"and we need one different digit character for each possible "
"value, which will be 0 up to the number base minus 1.");
break;
}
LOOP_THROUGH_TEXT(pos, lpe->digits_text)
if ((Characters::is_whitespace(Str::get(pos))) ||
(Str::get(pos) == ',') ||
(Str::get(pos) == '[') ||
(Str::get(pos) == ']')) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"the digits cannot include square brackets, commas or white space",
"such as spaces or tabs.");
break;
}
}
}
if (O & VALUES_TEXT_LSO) {
if ((O & WITH_LEADING_ZEROS_LSO) ||
(O & WITHOUT_LEADING_ZEROS_LSO) ||
(O & MAXIMUM_LSO) ||
(O & MAX_DIGITS_MASK_LSO) ||
(O & MAX_DIGITS_MASK_LSO) ||
(O & BASE_MASK_LSO)) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"the list of values cannot be used with those other options",
"since number base, leading zeros and digits make no sense, "
"and the range is determined by the number of items in the list.");
}
if ((O & DIGITS_TEXT_LSO) && (O & VALUES_TEXT_LSO)) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"you can't give both a digits text and a values text",
"since if the digits are determined then the values follow.");
}
TEMPORARY_TEXT(source)
WRITE_TO(source, "%W", Wordings::one_word(Annotations::read_int(p, lpe_values_ANNOT)));
Str::delete_first_character(source);
Str::delete_last_character(source);
lpe->values = LiteralPatterns::parse_value_set(source);
if (lpe->values) {
lpe->element_offset = 1;
lpe->element_range = LiteralPatterns::element_value_count(lpe->values);
lpe->print_with_leading_zeros = FALSE;
}
DISCARD_TEXT(source)
}
if ((size_needed) && ((O & (MAX_DIGITS_MASK_LSO + MAXIMUM_LSO)) == 0)) {
if ((size_needed) && ((O & (MAX_DIGITS_MASK_LSO + MAXIMUM_LSO + VALUES_TEXT_LSO)) == 0)) {
if (i == 0) lpe->element_range = -1;
else
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
"this has a part with no indication of its possible range",
"that is, by saying '0 to N' or 'N digits'.");
"that is, by saying '0 to N' or 'N digits' or giving a list "
"of possible values.");
}
if ((i == lp->no_lp_elements - 1) && (p->next)) {
@ -1469,6 +1590,10 @@ optional, and it must not be the first.
lpe->element_offset, lpe->element_offset + lpe->element_range);
else LOG("range unlimited ");
LOG("(base %d) ", lpe->number_base);
if (Str::len(lpe->digits_text) > 0) LOG("(digits %S) ", lpe->digits_text);
if (lpe->values) {
LOG("(values "); LiteralPatterns::log_element_value_set(lpe->values); LOG(")");
}
LOG("- multiplier %d\n", lpe->element_multiplier);
ec++;
break;
@ -1716,6 +1841,118 @@ literal_pattern *LiteralPatterns::list_of_literal_forms(kind *K) {
return K->construct->ways_to_write_literals;
}
@
=
literal_pattern_element_value_set *LiteralPatterns::parse_value_set(text_stream *src) {
literal_pattern_element_value_set *set = CREATE(literal_pattern_element_value_set);
set->source = Str::duplicate(src);
set->extent = 0;
int capacity = 4;
set->values = (literal_pattern_element_value_pair *)
(Memory::calloc(capacity, sizeof(literal_pattern_element_value_pair),
LITERAL_PATTERN_MREASON));
for (int i = 0; i<capacity; i++) {
set->values[i].value_equivalent = -1;
set->values[i].text_equivalent = NULL;
}
int err = FALSE, count = 0;
TEMPORARY_TEXT(term)
for (int i=0, state=1; i<Str::len(src); i++) {
wchar_t c = Str::get_at(src, i);
switch (state) {
case 1: /* waiting for term */
if (Characters::is_whitespace(c)) break;
if (c == ',') { err = TRUE; break; }
PUT_TO(term, c); state = 2;
break;
case 2: /* reading term */
if (Characters::is_whitespace(c)) { @<Complete term@>; state = 3; break; }
if (c == ',') { @<Complete term@>; state = 1; break; }
PUT_TO(term, c);
break;
case 3: /* waiting for comma */
if (Characters::is_whitespace(c)) break;
if (c == ',') { state = 1; break; }
err = TRUE; PUT_TO(term, c); state = 2;
break;
}
}
@<Complete term@>;
DISCARD_TEXT(term)
if (err) {
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
Problems::quote_source(1, current_sentence);
Problems::quote_stream(2, src);
Problems::issue_problem_segment(
"In the sentence %1, I am unable to work out the set of values '%2', "
"which should be a comma-separated list.");
Problems::issue_problem_end();
}
qsort(set->values, (size_t) set->extent, sizeof(literal_pattern_element_value_pair),
LiteralPatterns::compare_value_texts);
return set;
}
@<Complete term@> =
if (Str::len(term) > 0) {
if (set->extent >= capacity) {
int old_capacity = capacity;
literal_pattern_element_value_pair *old_values = set->values;
capacity = 4*capacity;
set->values = (literal_pattern_element_value_pair *)
(Memory::calloc(capacity, sizeof(literal_pattern_element_value_pair),
LITERAL_PATTERN_MREASON));
int i = 0;
for (; i<set->extent; i++) set->values[i] = old_values[i];
for (; i<capacity; i++) {
set->values[i].value_equivalent = -1;
set->values[i].text_equivalent = NULL;
}
Memory::I7_array_free(old_values, LITERAL_PATTERN_MREASON,
old_capacity, sizeof(literal_pattern_element_value_pair));
}
set->values[set->extent].value_equivalent = set->extent;
set->values[set->extent].text_equivalent = Str::duplicate(term);
set->extent++;
Str::clear(term);
count++;
}
@
=
int LiteralPatterns::compare_value_texts(const void *res1, const void *res2) {
const literal_pattern_element_value_pair *e1 = res1;
const literal_pattern_element_value_pair *e2 = res2;
int d = Str::len(e2->text_equivalent) - Str::len(e1->text_equivalent);
if (d != 0) return d;
return Str::cmp(e1->text_equivalent, e2->text_equivalent);
}
int LiteralPatterns::element_value_count(literal_pattern_element_value_set *set) {
if (set) return set->extent;
return 0;
}
text_stream *LiteralPatterns::element_value_text(literal_pattern_element_value_set *set,
int val) {
if ((set) && (val >= 0) && (val < set->extent)) return set->values[val].text_equivalent;
return NULL;
}
int LiteralPatterns::element_value_equivalent(literal_pattern_element_value_set *set,
int val) {
if ((set) && (val >= 0) && (val < set->extent)) return set->values[val].value_equivalent;
return -1;
}
void LiteralPatterns::log_element_value_set(literal_pattern_element_value_set *set) {
for (int i=0; i<set->extent; i++) {
if (i > 0) LOG(", ");
LOG("%d = <%S>", set->values[i].value_equivalent, set->values[i].text_equivalent);
}
}
@h Literal patterns in Preform.
Everything is finally set up so that we can define the following, which
recognises any literal written using a pattern. On success, it produces a

View file

@ -1,7 +1,7 @@
Size of lexicon: 3163 excerpt meanings
Stored among 856 words out of total vocabulary of 10784
720 words have a start list: longest belongs to report (with 293 meanings)
21 words have an end list: longest belongs to digit (with 7 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)