1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-30 22:14:58 +03:00

Removed 6 of the compilation modes

This commit is contained in:
Graham Nelson 2021-04-07 00:34:07 +01:00
parent 80e36dc532
commit 8bb060c576
85 changed files with 554 additions and 646 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6R72 'Krypton' (6 April 2021)
v10.1.0-alpha.1+6R73 'Krypton' (7 April 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 6 April 2021
Build Number: 6R72
Build Date: 7 April 2021
Build Number: 6R73

View file

@ -111,7 +111,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Holsters::to_val_mode</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vh</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Holsters::unholster_to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vh</span><span class="plain-syntax">) {</span>
<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><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no VH"</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">vh</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vhmode_provided</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">INTER_DATA_VHMODE:</span>

View file

@ -338,7 +338,7 @@ value, because this might not yet have been checked otherwise.
<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">Specifications::is_phrasal</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">constant</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dash::check_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">constant</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">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">constant</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="plain-syntax"> }</span>

View file

@ -300,7 +300,7 @@ person as the author of the main work.
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">w1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">), </span><span class="constant-syntax">HTML_BIBTEXT_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</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">result</span><span class="plain-syntax">;</span>
@ -347,14 +347,19 @@ configure Inform for its current purposes. On non-empty strings this routine
therefore splits into one of three independent methods.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">XML_BIBTEXT_MODE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TRUNCATE_BIBTEXT_MODE</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">I6_BIBTEXT_MODE</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">HTML_BIBTEXT_MODE</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BibliographicData::compile_bibliographic_text</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">BibliographicData::compile_bibliographic_text</span></span>:<br/><a href="2-bd.html#SP9">&#167;9</a><br/>The iFiction Record - <a href="2-tir.html#SP2">&#167;2</a><br/>The Blurb File - <a href="2-tbf.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BibliographicData::compile_bibliographic_text</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">BibliographicData::compile_bibliographic_text</span></span>:<br/><a href="2-bd.html#SP9">&#167;9</a><br/>The iFiction Record - <a href="2-tir.html#SP2">&#167;2</a><br/>The Blurb File - <a href="2-tbf.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> == </span><span class="constant-syntax">XML_BIBTEXT_MODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-bd.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Compile bibliographic text as XML respecting Treaty of Babel rules</span><span class="named-paragraph-number">11.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">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TRUNCATE_TEXT_CMODE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> == </span><span class="constant-syntax">TRUNCATE_BIBTEXT_MODE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-bd.html#SP11_4" class="named-paragraph-link"><span class="named-paragraph">Compile bibliographic text as a truncated filename</span><span class="named-paragraph-number">11.4</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">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_I6_CMODE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">encode_constant_text_bibliographically</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> == </span><span class="constant-syntax">I6_BIBTEXT_MODE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-bd.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Compile bibliographic text as an I6 string</span><span class="named-paragraph-number">11.3</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-bd.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Compile bibliographic text as HTML</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -487,7 +492,7 @@ inside Inform. For instance, if a project is called
</p>
<blockquote>
<p>"St. Bartholemew's Fair: \'Etude for a Push-Me/Pull-You Machine"</p>
<p>"St. Bartholemew's Fair: Etude for a Push-Me/Pull-You Machine"</p>
</blockquote>
<p class="commentary">then what would be a good filename for its released story file?

View file

@ -465,10 +465,7 @@ of writing the same thing.
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Task::ifiction_record_file</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</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">Problems::fatal_on_file</span><span class="plain-syntax">(</span><span class="string-syntax">"Can't open metadata file"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tir.html#SP1" class="function-link"><span class="function-syntax">iFiction::write_ifiction_record</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">, </span><span class="identifier-syntax">rel</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ri.html#SP9">&#167;9</a>.</li></ul>

View file

@ -122,10 +122,7 @@ the Blorb-file's filename won't be too long for the file system.
<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">story_title_VAR</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="identifier-syntax">TRUNCATE_TEXT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUNCATE_BIBTEXT_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">"story"</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">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">".%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TargetVMs::get_blorbed_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::vm</span><span class="plain-syntax">()));</span>
</pre>
@ -226,41 +223,36 @@ brackets [THUS].
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_release_number_VAR</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">"placeholder [RELEASE] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_release_number_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_release_number_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">XML_BIBTEXT_MODE</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">"\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"placeholder [RELEASE] = \"1\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_creation_year_VAR</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">"placeholder [YEAR] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_creation_year_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_creation_year_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">XML_BIBTEXT_MODE</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">"\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"placeholder [YEAR] = \"%d\"\n"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">the_present</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">tm_year</span><span class="plain-syntax">)+1900);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NonlocalVariables::initial_value_as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_title_VAR</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">"placeholder [TITLE] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">XML_BIBTEXT_MODE</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">"\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"placeholder [TITLE] = \"Untitled\"\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">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_author_VAR</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NonlocalVariables::initial_value_as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_author_VAR</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">"placeholder [AUTHOR] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_author_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_author_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">XML_BIBTEXT_MODE</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">"\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"placeholder [AUTHOR] = \"Anonymous\"\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">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_description_VAR</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NonlocalVariables::initial_value_as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">story_description_VAR</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">"placeholder [BLURB] = \""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_description_VAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-tbf.html#SP3" class="function-link"><span class="function-syntax">BlurbFile::write_var_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">story_description_VAR</span><span class="plain-syntax">, </span><span class="constant-syntax">XML_BIBTEXT_MODE</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">"\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"placeholder [BLURB] = \"A work of interactive fiction.\"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-tbf.html#SP1_2">&#167;1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_6" class="paragraph-anchor"></a><b>&#167;1.2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Give instructions about source text, solution and library card</span><span class="named-paragraph-number">1.2.6</span></span><span class="comment-syntax"> =</span>
@ -465,7 +457,7 @@ Inblorb to copy out later.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BlurbFile::write_var_to_text</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BlurbFile::write_var_to_text</span></span>:<br/><a href="2-tbf.html#SP1_1">&#167;1.1</a>, <a href="2-tbf.html#SP1_2_5">&#167;1.2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BlurbFile::write_var_to_text</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BlurbFile::write_var_to_text</span></span>:<br/><a href="2-tbf.html#SP1_1">&#167;1.1</a>, <a href="2-tbf.html#SP1_2_5">&#167;1.2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NonlocalVariables::substitute_constants</span><span class="plain-syntax">(</span>
@ -477,14 +469,14 @@ Inblorb to copy out later.
<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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">CompileSpecifications::holster_constant</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</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">"%d"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">w1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">), </span><span class="identifier-syntax">mode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>

View file

@ -341,14 +341,14 @@ LISP.
<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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">CompileSpecifications::holster_constant</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</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">"%d"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">w1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-bd.html#SP11" class="function-link"><span class="function-syntax">BibliographicData::compile_bibliographic_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">w1</span><span class="plain-syntax">), </span><span class="constant-syntax">XML_BIBTEXT_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>

View file

@ -235,7 +235,7 @@ almost, because there could also be options set on it.
<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>And this uses the <a href="../values-module/2-dsh.html" class="internal">Dash (in values)</a> typechecker to validate that a specification
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>And this uses the <a href="../values-module/5-dsh.html" class="internal">Dash (in values)</a> typechecker to validate that a specification
makes sense in a given clause:
</p>

View file

@ -186,7 +186,7 @@ return the number of cinders made.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">constant</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-cad.html#SP4" class="function-link"><span class="function-syntax">Calculus::Deferrals::Cinders::spec_needs_to_be_cindered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">constant</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">cinder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cinder_number</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_pdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">cinder_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">cinder</span><span class="plain-syntax">] =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">started</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>

View file

@ -72,7 +72,11 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">imperative</a></li><li><a href="index.html#3">Chapter 3: Propositions</a></li><li><b>Compiling from Specifications</b></li></ul></div>
<p class="purpose">To compile specifications into Inter values, conditions or void expressions.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>In a more traditional compiler, the code-generator would be something of a
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Specifications unite values, conditions and descriptions: see <a href="../values-module/2-spc.html" class="internal">Specifications (in values)</a>.
They are stored as <span class="extract"><span class="extract-syntax">parse_node</span></span> pointers. Here, we compile them to a
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>In a more traditional compiler, the code-generator would be something of a
landmark &mdash; one of the three or four most important stations. Here it's
something of an anticlimax, partly because traditional "code" &mdash; values
and statements &mdash; are only a small part of the I6 we have to generate,
@ -84,7 +88,7 @@ specifications &mdash; phrases to do something, or to decide things; constants;
variables; conditions &mdash; finally convert into I6 code.
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>For the most part this is "modeless" &mdash; that is, the I6 code generated
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>For the most part this is "modeless" &mdash; that is, the I6 code generated
by a specification does not depend on any context. But not entirely so, and
we have a small set of "C-modes", each of which slightly alters the result
to fit some particular need.
@ -110,21 +114,14 @@ enter or exit macros to switch a particular mode on or off.
<span class="definition-keyword">define</span> <span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000001</span><span class="plain-syntax"> </span><span class="comment-syntax"> make an independent copy of the result if on the heap</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">IMPLY_NEWLINES_IN_SAY_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000010</span><span class="plain-syntax"> </span><span class="comment-syntax"> at the end, that is</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PERMIT_LOCALS_IN_TEXT_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000020</span><span class="plain-syntax"> </span><span class="comment-syntax"> unless casting to text</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">COMPILE_TEXT_TO_QUOT_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000080</span><span class="plain-syntax"> </span><span class="comment-syntax"> for the idiosyncratic I6 </span><span class="extract"><span class="extract-syntax">box</span></span><span class="comment-syntax"> statement</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000100</span><span class="plain-syntax"> </span><span class="comment-syntax"> use XML escapes and UTF-8 encoding</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TRUNCATE_TEXT_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000200</span><span class="plain-syntax"> </span><span class="comment-syntax"> into a plausible filename length</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">COMPILE_TEXT_TO_I6_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00001000</span><span class="plain-syntax"> </span><span class="comment-syntax"> for bibliographic text to I6 constants</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">CONSTANT_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00002000</span><span class="plain-syntax"> </span><span class="comment-syntax"> compiling values in a constant context</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SPECIFICATIONS_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00004000</span><span class="plain-syntax"> </span><span class="comment-syntax"> compiling specifications at all</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00008000</span><span class="plain-syntax"> </span><span class="comment-syntax"> blank out table references</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00010000</span><span class="plain-syntax"> </span><span class="comment-syntax"> similarly affects table references</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">JUST_ROUTINE_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00020000</span><span class="plain-syntax"> </span><span class="comment-syntax"> similarly affects table references</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TABLE_EXISTENCE_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00040000</span><span class="plain-syntax"> </span><span class="comment-syntax"> test table references for existence</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00010000</span><span class="plain-syntax"> </span><span class="comment-syntax"> compile storage as lvalue not rvalue</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">JUST_ROUTINE_CMODE</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00020000</span><span class="plain-syntax"> </span><span class="comment-syntax"> compile storage to Inter function handling it</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">compilation_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax"> + </span><span class="constant-syntax">IMPLY_NEWLINES_IN_SAY_CMODE</span><span class="plain-syntax">; </span><span class="comment-syntax"> default</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>These modes are all explained where they are used. The one used right here
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>These modes are all explained where they are used. The one used right here
is <span class="extract"><span class="extract-syntax">DEREFERENCE_POINTERS_CMODE</span></span>. This applies only when compiling a specification
which generates a pointer value &mdash; an I6 value which is a pointer to a larger
block of data on the heap, such as a list or text.
@ -145,34 +142,85 @@ therefore exists as a way of temporarily turning off dereferencing &mdash; by
default, it is always on.
</p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The outer shell here has two purposes. One is to copy the specification
onto the local stack frame and then compile that copy &mdash; useful since
compilation may alter its contents. The other purpose, and this is not to
be dismissed lightly, is to ensure correct indentation in the log when
we exit unexpectedly, for instance due to a problem.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>And the same in a constant context:
</p>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::compile_inner</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">Specifications::Compiler::compile_inner</span></span>:<br/><a href="3-cfs.html#SP8">&#167;8</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXPRESSIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling: $P\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NonlocalVariables::substitute_constants</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::to_array_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_holster</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Emit::array_generic_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">SPECIFICATIONS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> </span><span class="identifier-syntax">breakable_copy</span><span class="plain-syntax"> = *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">Specifications::Compiler::spec_compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">breakable_copy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::to_array_entry_promoting</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_array_entry</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::cast</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::to_code_val</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">CompileSpecifications::to_code_val</span></span>:<br/><a href="3-cfs.html#SP6">&#167;6</a><br/>Deciding to Defer - <a href="3-dtd.html#SP6_1_2">&#167;6.1.2</a>, <a href="3-dtd.html#SP14">&#167;14</a>, <a href="3-dtd.html#SP16">&#167;16</a>, <a href="3-dtd.html#SP17">&#167;17</a>, <a href="3-dtd.html#SP19">&#167;19</a>, <a href="3-dtd.html#SP20">&#167;20</a>, <a href="3-dtd.html#SP22">&#167;22</a>, <a href="3-dtd.html#SP23">&#167;23</a>, <a href="3-dtd.html#SP25">&#167;25</a>, <a href="3-dtd.html#SP27">&#167;27</a><br/>Cinders and Deferrals - <a href="3-cad.html#SP3">&#167;3</a><br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_5_2">&#167;4.3.5.2</a>, <a href="4-cbal.html#SP4_3_5_5">&#167;4.3.5.5</a>, <a href="4-cbal.html#SP4_3_5_1_2">&#167;4.3.5.1.2</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP3">&#167;3</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP6_1_1_4_9">&#167;6.1.1.4.9</a>, <a href="4-cii.html#SP6_1_1_4_10">&#167;6.1.1.4.10</a>, <a href="4-cii.html#SP11">&#167;11</a><br/>Compile Solutions to Equations - <a href="4-cste.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_holster</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>So this is where the compilation is done, or rather, delegated:
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>A variation on this is to compile a specification which represents
a value in a context where a particular kind of value is expected:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::spec_compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Specifications::Compiler::spec_compile_primitive</span></span>:<br/><a href="3-cfs.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::to_code_val_promoting</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">CompileSpecifications::to_code_val_promoting</span></span>:<br/>Emitting from Schemas - <a href="3-efs.html#SP2_3">&#167;2.3</a><br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2_1_2">&#167;1.3.1.2.1.2</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP2_2">&#167;2.2</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP6_1_1_3">&#167;6.1.1.3</a>, <a href="4-cii.html#SP6_1_1_4_7_1">&#167;6.1.1.4.7.1</a>, <a href="4-cii.html#SP6_5_8">&#167;6.5.8</a>, <a href="4-cii.html#SP6_5_8_1">&#167;6.5.8.1</a>, <a href="4-cii.html#SP6_5_8_2">&#167;6.5.8.2</a>, <a href="4-cii.html#SP6_5_8_3">&#167;6.5.8.3</a><br/>Compile Arithmetic - <a href="4-ca.html#SP1_2_1">&#167;1.2.1</a>, <a href="4-ca.html#SP1_2_2">&#167;1.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::emit_cast_call</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">PERMIT_LOCALS_IN_TEXT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">down</span><span class="plain-syntax">) </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::holster_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_holster</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::cast</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSpecifications::cast</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CompileSpecifications::cast</span></span>:<br/><a href="3-cfs.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LiteralReals::promote_number_if_necessary</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSpecifications::to_pair</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CompileSpecifications::to_pair</span></span>:<br/>Compile Invocations Inline - <a href="4-cii.html#SP11_1">&#167;11.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v2</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_holster</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</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">CompileSpecifications::to_holster</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">CompileSpecifications::to_holster</span></span>:<br/><a href="3-cfs.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">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="identifier-syntax">c</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXPRESSIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling: $P\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span 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="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NonlocalVariables::substitute_constants</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
@ -190,8 +238,9 @@ we exit unexpectedly, for instance due to a problem.
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::compile</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_rvalue</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::compile</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</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">VH</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vhmode_provided</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">VH</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vhmode_wanted</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::to_val_mode</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">VH</span><span class="plain-syntax">);</span>
<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">-&gt;</span><span class="identifier-syntax">vhmode_provided</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">VH</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vhmode_wanted</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::unholster_to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">VH</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_condition</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Conditions::compile</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
@ -199,92 +248,8 @@ we exit unexpectedly, for instance due to a problem.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dereffed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>A variation on this is to compile a specification which represents
a value in a context where a particular kind of value is expected:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::emit_to_kind</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></span>:<br/>Emitting from Schemas - <a href="3-efs.html#SP2_3">&#167;2.3</a><br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2_1_2">&#167;1.3.1.2.1.2</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP2_2">&#167;2.2</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP6_1_1_3">&#167;6.1.1.3</a>, <a href="4-cii.html#SP6_1_1_4_7_1">&#167;6.1.1.4.7.1</a>, <a href="4-cii.html#SP6_5_8">&#167;6.5.8</a>, <a href="4-cii.html#SP6_5_8_1">&#167;6.5.8.1</a>, <a href="4-cii.html#SP6_5_8_2">&#167;6.5.8.2</a>, <a href="4-cii.html#SP6_5_8_3">&#167;6.5.8.3</a><br/>Compile Arithmetic - <a href="4-ca.html#SP1_2_1">&#167;1.2.1</a>, <a href="4-ca.html#SP1_2_2">&#167;1.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::emit_cast_call</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">PERMIT_LOCALS_IN_TEXT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">down</span><span class="plain-syntax">) </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>And the same in a constant context:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">Specifications::Compiler::compile_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::cast_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</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">Specifications::Compiler::emit_constant_to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_CMODE</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">casted</span><span class="plain-syntax"> = </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::cast_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">casted</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">Specifications::Compiler::emit_constant_to_kind_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_CMODE</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">casted</span><span class="plain-syntax"> = </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::cast_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">casted</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::Compiler::cast_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_real_number</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-literal-real-number&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't parse integer as real"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">Specifications::Compiler::compile_inner</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Emit::array_generic_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Specifications::Compiler::emit_as_val</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></span>:<br/><a href="3-cfs.html#SP7">&#167;7</a><br/>Deciding to Defer - <a href="3-dtd.html#SP6_1_2">&#167;6.1.2</a>, <a href="3-dtd.html#SP14">&#167;14</a>, <a href="3-dtd.html#SP16">&#167;16</a>, <a href="3-dtd.html#SP17">&#167;17</a>, <a href="3-dtd.html#SP19">&#167;19</a>, <a href="3-dtd.html#SP20">&#167;20</a>, <a href="3-dtd.html#SP22">&#167;22</a>, <a href="3-dtd.html#SP23">&#167;23</a>, <a href="3-dtd.html#SP25">&#167;25</a>, <a href="3-dtd.html#SP27">&#167;27</a><br/>Cinders and Deferrals - <a href="3-cad.html#SP3">&#167;3</a><br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_5_2">&#167;4.3.5.2</a>, <a href="4-cbal.html#SP4_3_5_5">&#167;4.3.5.5</a>, <a href="4-cbal.html#SP4_3_5_1_2">&#167;4.3.5.1.2</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP3">&#167;3</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP6_1_1_4_9">&#167;6.1.1.4.9</a>, <a href="4-cii.html#SP6_1_1_4_10">&#167;6.1.1.4.10</a>, <a href="4-cii.html#SP11">&#167;11</a><br/>Compile Solutions to Equations - <a href="4-cste.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">Specifications::Compiler::compile_inner</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -302,7 +302,7 @@ substitution of \(x=v\).
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ppd_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cad.html#SP3" class="function-link"><span class="function-syntax">Calculus::Deferrals::Cinders::find_emit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">substitution</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">substitution</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">substitution</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">substitution</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-dtd.html#SP6_1">&#167;6.1</a>.</li></ul>
@ -752,7 +752,7 @@ defer it to a proposition with reason <span class="extract"><span class="extract
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-dtd.html#SP15" class="function-link"><span class="function-syntax">Calculus::Deferrals::spec_is_variable_of_kind_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT1_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">NUMBER_OF_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -818,7 +818,7 @@ defer it to a proposition with reason <span class="extract"><span class="extract
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">LIST_OF_TY_DESC_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="2-sf.html#SP21" class="function-link"><span class="function-syntax">Frames::emit_new_local_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::emit_strong_id_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -851,7 +851,7 @@ defer it to a proposition with reason <span class="extract"><span class="extract
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-dtd.html#SP15" class="function-link"><span class="function-syntax">Calculus::Deferrals::spec_is_variable_of_kind_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT1_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">RANDOM_OF_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -908,7 +908,7 @@ a loop traverses.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT1_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">TOTAL_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
@ -931,9 +931,9 @@ the "substitution variable") is within the domain.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-dtd.html#SP15" class="function-link"><span class="function-syntax">Calculus::Deferrals::spec_is_variable_of_kind_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT2_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">CONDITION_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">in</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">in</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="3-dtd.html#SP6" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_test_of_proposition</span></a><span class="plain-syntax">(</span>
@ -989,7 +989,7 @@ over identifying which superlative is meant. We get here from code like
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT1_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">EXTREMAL_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
@ -1125,9 +1125,9 @@ until it returns 0, when the domain is exhausted.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT2_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">CONDITION_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</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="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::new_LOCAL_VARIABLE</span><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">v1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
@ -1228,7 +1228,7 @@ deferred description routine, and we simply call that routine with the
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Deferrals::emit_repeat_call</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Calculus::Deferrals::emit_repeat_call</span></span>:<br/><a href="3-dtd.html#SP23">&#167;23</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">local_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fromv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT2_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">LOOP_DOMAIN_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fromv</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">fromv_s</span><span class="plain-syntax"> = </span><a href="2-lv.html#SP1" class="function-link"><span class="function-syntax">LocalVariables::declare</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">fromv</span><span class="plain-syntax">);</span>
@ -1301,7 +1301,7 @@ will never be needed for anything else.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">copy_var_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">SEQUENTIAL_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>

View file

@ -250,8 +250,8 @@ in several different ways.
<span class="plain-syntax"> </span><span class="identifier-syntax">req_A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!((</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">req_B</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">req_B</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">req_B</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_A</span><span class="plain-syntax">, </span><span class="identifier-syntax">req_A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_B</span><span class="plain-syntax">, </span><span class="identifier-syntax">req_B</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_A</span><span class="plain-syntax">, </span><span class="identifier-syntax">req_A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_B</span><span class="plain-syntax">, </span><span class="identifier-syntax">req_B</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">epar</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>

View file

@ -450,7 +450,7 @@ function like <span class="extract"><span class="extract-syntax">log pi</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">X</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">KX</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">KX</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-cste.html#SP4" class="function-link"><span class="function-syntax">EquationSolver::compile_enode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">eqn</span><span class="plain-syntax">, </span><span class="identifier-syntax">EX</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ca.html#SP1_2">&#167;1.2</a> (twice), <a href="4-ca.html#SP1_3">&#167;1.3</a> (twice), <a href="4-ca.html#SP1_4">&#167;1.4</a> (twice), <a href="4-ca.html#SP1_5">&#167;1.5</a> (twice), <a href="4-ca.html#SP1_6">&#167;1.6</a> (twice), <a href="4-ca.html#SP1_7">&#167;1.7</a> (twice), <a href="4-ca.html#SP1_8">&#167;1.8</a> (twice), <a href="4-ca.html#SP1_9">&#167;1.9</a> (twice), <a href="4-ca.html#SP1_10">&#167;1.10</a>, <a href="4-ca.html#SP1_11">&#167;1.11</a> (twice), <a href="4-ca.html#SP1_12">&#167;1.12</a> (three times), <a href="4-ca.html#SP1_13">&#167;1.13</a> (twice).</li></ul>
@ -458,7 +458,7 @@ function like <span class="extract"><span class="extract-syntax">log pi</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">Y</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Y</span><span class="plain-syntax">, </span><span class="identifier-syntax">KY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Y</span><span class="plain-syntax">, </span><span class="identifier-syntax">KY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-cste.html#SP4" class="function-link"><span class="function-syntax">EquationSolver::compile_enode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">eqn</span><span class="plain-syntax">, </span><span class="identifier-syntax">EY</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ca.html#SP1_2">&#167;1.2</a> (twice), <a href="4-ca.html#SP1_3">&#167;1.3</a> (twice), <a href="4-ca.html#SP1_4">&#167;1.4</a> (twice), <a href="4-ca.html#SP1_5">&#167;1.5</a> (twice), <a href="4-ca.html#SP1_6">&#167;1.6</a> (twice), <a href="4-ca.html#SP1_7">&#167;1.7</a> (twice), <a href="4-ca.html#SP1_10">&#167;1.10</a>, <a href="4-ca.html#SP1_12">&#167;1.12</a>, <a href="4-ca.html#SP1_13">&#167;1.13</a> (twice).</li></ul>

View file

@ -597,7 +597,7 @@ the data into <span class="extract"><span class="extract-syntax">sw_v</span></sp
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">sw_v</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">switch_val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">switch_val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cbal.html#SP4_3_5">&#167;4.3.5</a>.</li></ul>
@ -661,7 +661,7 @@ of <span class="extract"><span class="extract-syntax">downs</span></span> is how
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">SWITCH_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">switch_val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">switch_val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
@ -672,7 +672,7 @@ of <span class="extract"><span class="extract-syntax">downs</span></span> is how
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">case_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">switch_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">case_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">statement_count</span><span class="plain-syntax"> = </span><a href="4-cbal.html#SP2" class="function-link"><span class="function-syntax">CompileBlocksAndLines::code_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">statement_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">ow_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>

View file

@ -379,7 +379,7 @@ at runtime; we assign 0 to it for the sake of tidiness.
<span class="plain-syntax"> </span><span class="identifier-syntax">Invocations::get_token_as_parsed</span><span class="plain-syntax">(</span><span class="identifier-syntax">first_inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_be_used_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">type_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">token_sequence</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">to_match</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_be_used_as</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_be_used_as</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
@ -704,16 +704,18 @@ stop automatically generates a newline:
</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">IDTypeData::is_a_say_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">))) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="constant-syntax">IMPLY_NEWLINES_IN_SAY_CMODE</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tokens_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Word::text_ending_sentence</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]))))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">PRINT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IDTypeData::is_a_say_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">)-&gt;</span><span class="identifier-syntax">type_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">as_say</span><span class="plain-syntax">.</span><span class="identifier-syntax">say_phrase_running_on</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="constant-syntax">IMPLY_NEWLINES_IN_SAY_CMODE</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tokens_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Word::text_ending_sentence</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]))))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">PRINT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ci.html#SP2_1">&#167;2.1</a>.</li></ul>

View file

@ -137,7 +137,7 @@ to the tokens then follow, and finally the optional bitmap of phrase options.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">return_kind</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-sf.html#SP21" class="function-link"><span class="function-syntax">Frames::emit_new_local_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">return_kind</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">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="function-syntax">&lt;tokens-&gt;</span><span class="element-syntax">tokens_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">k</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">], </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">], </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrase_options</span><span class="plain-syntax"> != -1)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">phrase_options</span><span class="plain-syntax">);</span>
</pre>
@ -170,11 +170,11 @@ invocations.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lookup_flag</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">LOOKUP_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">indirect_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">indirect_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">indirect_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">indirect_spec</span><span class="plain-syntax">);</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">phrase_options</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ciac.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Emit the comma-separated list of arguments</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>

View file

@ -427,9 +427,6 @@ the presence of annotations can change what we do.
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">supplied</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">tok</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">by_value_not_reference</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_as_quotation</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="identifier-syntax">blank_out</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="identifier-syntax">reference_exists</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="identifier-syntax">require_to_be_lvalue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP6_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Take account of any annotation to the inline token</span><span class="named-paragraph-number">6.1.1.4</span></a></span><span class="plain-syntax">;</span>
@ -517,27 +514,12 @@ do not want.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">blank_out</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">reference_exists</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">TABLE_EXISTENCE_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">TABLE_EXISTENCE_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">text_as_quotation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_TEXT_TO_QUOT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_TEXT_TO_QUOT_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"Expanding $P into '%W' with %d, %u%s%s\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">BRW</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_required</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">changed</span><span class="plain-syntax">?</span><span class="string-syntax">" (after kind substitution)"</span><span class="plain-syntax">:</span><span class="string-syntax">""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">by_value_not_reference</span><span class="plain-syntax">?</span><span class="string-syntax">" (by value)"</span><span class="plain-syntax">:</span><span class="string-syntax">" (by reference)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_required</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_required</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP6_1_1">&#167;6.1.1</a>.</li></ul>
@ -601,9 +583,8 @@ this list, the original will change.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">by_value_not_reference</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">valid_annotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">blank_out</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::compile_table_reference</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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="comment-syntax"> that is, don't use the regular token compiler: we've done it ourselves</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP6_1_1_4">&#167;6.1.1.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_4_3" class="paragraph-anchor"></a><b>&#167;6.1.1.4.3. </b>And, variedly:
@ -613,9 +594,8 @@ this list, the original will change.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">by_value_not_reference</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">valid_annotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">reference_exists</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::compile_table_reference</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> that is, don't use the regular token compiler: we've done it ourselves</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP6_1_1_4">&#167;6.1.1.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1_1_4_4" class="paragraph-anchor"></a><b>&#167;6.1.1.4.4. </b>This is a variant which checks that the reference is to an lvalue, that is,
@ -665,9 +645,10 @@ but honestly having this annotation seems the smaller of the two warts.
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_as_quotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">by_value_not_reference</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">valid_annotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextLiterals::compile_quotation</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::unholster_to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> that is, don't use the regular token compiler: we've done it ourselves</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP6_1_1_4">&#167;6.1.1.4</a>.</li></ul>
@ -732,11 +713,11 @@ problem messages are phrased differently if something goes wrong.
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP6_1_1_4_7_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for returning a value when none was asked</span><span class="named-paragraph-number">6.1.1.4.7.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">allow_me</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ALWAYS_MATCH</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">allow_me</span><span class="plain-syntax"> == </span><span class="identifier-syntax">SOMETIMES_MATCH</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">CHECKKINDRETURNED_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">supplied</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTKinds::I6_classname</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_needed</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP6_1_1_4_7_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for returning a value of the wrong kind</span><span class="named-paragraph-number">6.1.1.4.7.1.2</span></a></span><span class="plain-syntax">;</span>
@ -798,7 +779,7 @@ problem messages are phrased differently if something goes wrong.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORED_ACTION_TY_TRY_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">valid_annotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -850,7 +831,7 @@ problem messages are phrased differently if something goes wrong.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORED_ACTION_TY_TRY_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">, </span><span class="identifier-syntax">supplied</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
@ -1710,7 +1691,7 @@ result would be the same without the optimisation.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP6_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue an inline no-such-kind problem</span><span class="named-paragraph-number">6.2.1.2</span></a></span><span class="plain-syntax">;</span>
@ -1739,7 +1720,7 @@ result would be the same without the optimisation.
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Kinds::Behaviour::get_iname</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">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -1758,7 +1739,7 @@ result would be the same without the optimisation.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">SAY__N_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
@ -1779,7 +1760,7 @@ language.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNICODE_TEMP_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val_promoting</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_say</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TargetVMs::is_16_bit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::vm</span><span class="plain-syntax">())) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_assembly</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"@print_unicode"</span><span class="plain-syntax">);</span>
@ -2212,7 +2193,7 @@ test case <span class="extract"><span class="extract-syntax">BracketPlus</span><
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -2269,12 +2250,8 @@ representation. This is the functionality I would most like to remove from Infor
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate the text as a value</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="constant-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">Specifications::Compiler::compile_inner</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH2</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</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">Holsters::unholster_pair</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH2</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP6" class="function-link"><span class="function-syntax">CompileSpecifications::to_pair</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</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">v1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ALIAS_IVAL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL_SYMBOL_CHAR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> =</span>
@ -2285,7 +2262,6 @@ representation. This is the functionality I would most like to remove from Infor
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CodeGen::FC::val_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">()), </span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="constant-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>&#167;11.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Evaluate the text as a value</span><span class="named-paragraph-number">11.2</span></span><span class="comment-syntax"> =</span>

View file

@ -321,7 +321,7 @@ casting between quasinumerical kinds, we'll have to return to this.)
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">eqn_type</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">SYMBOL_EQN:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_symbol</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">var_const</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_symbol</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">var_const</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_symbol</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">var_const</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_symbol</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">local_map</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_symbol</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">promote_local_to_real</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(),</span>
@ -342,7 +342,7 @@ casting between quasinumerical kinds, we'll have to return to this.)
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"uncompilable equation node"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_EQN:</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP8" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_as_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-cfs.html#SP5" class="function-link"><span class="function-syntax">CompileSpecifications::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">leaf_constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OPERATION_EQN:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cste.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Emit a single operation</span><span class="named-paragraph-number">4.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="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"forbidden enode found in parsed equation"</span><span class="plain-syntax">);</span>

View file

@ -154,16 +154,13 @@ Contents listing, so:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IXBibliographicData::index_variable</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">IXBibliographicData::index_variable</span></span>:<br/><a href="3-bd.html#SP2">&#167;2</a>, <a href="3-bd.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_XML_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">VariableSubjects::has_initial_value_set</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NonlocalVariables::initial_value_as_plain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BibliographicData::compile_bibliographic_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)), </span><span class="identifier-syntax">XML_BIBTEXT_MODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -135,7 +135,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NOT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_number</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">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>

View file

@ -132,13 +132,13 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Deferrals::compile_deferred_description_test</span><span class="plain-syntax">(</span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">acting_on</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">acting_on</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">acting_on</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">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">only_when</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">only_when</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">al</span><span class="plain-syntax"> = </span><span class="identifier-syntax">al</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -767,7 +767,7 @@ a file stream, thus allowing rewinding:
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>

View file

@ -142,7 +142,7 @@ the list!);
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_llist_entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_llist_entry</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_constant_to_kind</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry_promoting</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">llist_entry_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entry_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
</pre>

View file

@ -218,7 +218,7 @@ only and may change at any time without notice.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT1V_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::Behaviour::get_iname</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">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
@ -376,7 +376,7 @@ only and may change at any time without notice.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">LIST_OF_TY_SAY_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -384,7 +384,7 @@ only and may change at any time without notice.
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">Kinds::Behaviour::get_iname</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">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -401,13 +401,7 @@ all to work; the following keep a flag to mark that.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTProperties::compile_vp_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ValueProperties::kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="identifier-syntax">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::compile_inner</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::holster_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTProperties::compile_vp_default_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>

View file

@ -2056,7 +2056,7 @@ whether or not $R(<span class="extract"><span class="extract-syntax">t_0</span><
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">RETURN_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
@ -2169,8 +2169,8 @@ matches the specific necessary kind of object if there is one.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><a href="4-rart.html#SP1" class="function-link"><span class="function-syntax">RTRelations::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">RELS_ASSERT_TRUE_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Functions::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>

View file

@ -256,7 +256,7 @@ conditions have not been met.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-condition&gt;(acl-&gt;</span><span class="identifier-syntax">text_of_condition</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="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dash::check_condition</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">acl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">text_of_condition</span><span class="plain-syntax">);</span>
@ -615,7 +615,7 @@ than once for each rule.
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">format</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">ARRAY_RBF:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">GROUPED_ARRAY_RBF:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry</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">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">ROUTINE_RBF:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
@ -648,7 +648,7 @@ than once for each rule.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">rv_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT0_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -675,7 +675,7 @@ than once for each rule.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">RETURN_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>

View file

@ -177,7 +177,7 @@ chosen), but no problem message has been issued about this, or
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">RTKinds::emit_default_value_as_val</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">RTKinds::emit_default_value_as_val</span></span>:<br/><a href="4-rsfk.html#SP27_6_2">&#167;27.6.2</a><br/>Conditions - <a href="4-cnd.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">storage_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_DATA_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><a href="4-rsfk.html#SP5" class="function-link"><span class="function-syntax">RTKinds::compile_default_value_vh</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">storage_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::to_val_mode</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::unholster_to_code_val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">VH</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">rv</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">RTKinds::compile_default_value_vh</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">RTKinds::compile_default_value_vh</span></span>:<br/>Variables - <a href="4-vrb.html#SP8_1">&#167;8.1</a><br/>Properties - <a href="4-prp.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>

View file

@ -344,7 +344,7 @@ used to define new kinds; in this case it doesn't matter what we write, but
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">cell</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_kind_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)) </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">val</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Valueless cell"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_constant_to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</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">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry_promoting</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>

View file

@ -628,9 +628,7 @@ text needs to be printed in a particular way.
<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">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">SW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Text no longer available for CONSTANT/TEXT"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_QUOT_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-tl.html#SP11" class="function-link"><span class="function-syntax">TextLiterals::compile_quotation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">SW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rsp.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">This is going to make a valid I7 text value</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rsp.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">This is going to make a valid I7 text value</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -325,7 +325,7 @@ different for compilation purposes.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">extent_of_runtime_quotations_array</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> start at 1 to avoid 0 length</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TextLiterals::compile_quotation</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">TextLiterals::compile_quotation</span></span>:<br/>Responses - <a href="4-rsp.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TextLiterals::compile_quotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lt</span><span class="plain-syntax"> = </span><a href="4-tl.html#SP9" class="function-link"><span class="function-syntax">TextLiterals::compile_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lt</span><span class="plain-syntax">) </span><span class="identifier-syntax">lt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_boxed_quotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
@ -336,7 +336,7 @@ different for compilation purposes.
<span class="plain-syntax"> </span><span class="identifier-syntax">extent_of_runtime_quotations_array</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">TextLiterals::CCOUNT_QUOTATIONS</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">TextLiterals::CCOUNT_QUOTATIONS</span></span>:<br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">TextLiterals::CCOUNT_QUOTATIONS</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">TextLiterals::CCOUNT_QUOTATIONS</span></span>:<br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP27">&#167;27</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">extent_of_runtime_quotations_array</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -344,7 +344,7 @@ different for compilation purposes.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TextLiterals::compile_literal_from_text</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">TextLiterals::compile_literal_from_text</span></span>:<br/>Bibliographic Data - <a href="5-bd.html#SP1_1">&#167;1.1</a>, <a href="5-bd.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">context</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TextLiterals::compile_literal_from_text</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">TextLiterals::compile_literal_from_text</span></span>:<br/>Bibliographic Data - <a href="5-bd.html#SP1_1">&#167;1.1</a>, <a href="5-bd.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">context</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v2</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</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">literal_text</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lt</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-tl.html#SP9" class="function-link"><span class="function-syntax">TextLiterals::compile_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Feeds::feed_C_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
@ -427,7 +427,7 @@ number <span class="extract"><span class="extract-syntax">-1</span></span>).
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="function-syntax">TextLiterals::compile_literal_sb</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">TextLiterals::compile_literal_sb</span></span>:<br/>Responses - <a href="4-rsp.html#SP11_1_2">&#167;11.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="function-syntax">TextLiterals::compile_literal_sb</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">TextLiterals::compile_literal_sb</span></span>:<br/>Responses - <a href="4-rsp.html#SP11_1_2">&#167;11.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="4-rsfk.html#SP6" class="function-link"><span class="function-syntax">RTKinds::new_block_constant_iname</span></a><span class="plain-syntax">();</span>

View file

@ -510,7 +510,7 @@ which makes its kind safe. Hence the error messages.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTVariables::emit_initial_value_as_val</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">RTVariables::emit_initial_value_as_val</span></span>:<br/><a href="4-vrb.html#SP5_1">&#167;5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-vrb.html#SP8" class="function-link"><span class="function-syntax">RTVariables::compile_initial_value_vh</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::to_val_mode</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Holsters::unholster_to_code_val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">VH</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">RTVariables::seek_initial_value</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">RTVariables::seek_initial_value</span></span>:<br/><a href="4-vrb.html#SP7">&#167;7</a><br/>Bibliographic Data - <a href="5-bd.html#SP1_1">&#167;1.1</a>, <a href="5-bd.html#SP1_2">&#167;1.2</a>, <a href="5-bd.html#SP1_3">&#167;1.3</a>, <a href="5-bd.html#SP1_4">&#167;1.4</a><br/>The Score - <a href="5-ts.html#SP1">&#167;1</a></span></button><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><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v1</span><span class="plain-syntax">,</span>
@ -532,7 +532,7 @@ which makes its kind safe. Hence the error messages.
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VariableSubjects::origin_of_initial_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lvalues::get_storage_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-vrb.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for one variable set equal to another</span><span class="named-paragraph-number">8.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::compile_constant_to_kind_vh</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nlv_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::holster_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">nlv_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -135,7 +135,7 @@ text when the action expects that.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dash::check_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">required_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -215,7 +215,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lvar_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">lvar_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
@ -243,10 +243,10 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ct_0_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">force_proposition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -266,7 +266,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">INDIRECT2_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONSULT_FROM_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONSULT_WORDS_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -284,8 +284,8 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">adapt_region</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TESTREGIONALCONTAINMENT_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">force_proposition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -299,8 +299,8 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> (</span><span class="identifier-syntax">Instances::of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">Descriptions::to_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_region</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TESTREGIONALCONTAINMENT_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_var_TS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">force_proposition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -357,7 +357,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lt</span><span class="plain-syntax"> = </span><a href="4-tl.html#SP9" class="function-link"><span class="function-syntax">TextLiterals::compile_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lt_sba_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">BC</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_noun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_noun</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-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> }</span>
@ -366,12 +366,12 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">request_bits</span><span class="plain-syntax"> = </span><span class="identifier-syntax">request_bits</span><span class="plain-syntax"> | </span><span class="constant-syntax">32</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_text</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lt</span><span class="plain-syntax"> = </span><a href="4-tl.html#SP9" class="function-link"><span class="function-syntax">TextLiterals::compile_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">second_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">lt_sba_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">second_noun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">second_noun</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-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><span class="plain-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">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">actor</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">actor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_array_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">actor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><a href="4-ins.html#SP1" class="function-link"><span class="function-syntax">RTInstances::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I_yourself</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">request_bits</span><span class="plain-syntax">);</span>
@ -864,7 +864,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="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">WHEN_CONDITION_HOLDS_CPMC:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">APClauses::spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">WHEN_AP_CLAUSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">APClauses::spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">WHEN_AP_CLAUSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -879,7 +879,7 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">APClauses::spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOUN_AP_CLAUSE</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">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">APClauses::spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">APClauses::spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">action_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) -1);</span>

View file

@ -82,16 +82,11 @@ constants.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTBibliographicData::compile_constants</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">encode_constant_text_bibliographically</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_ENTER</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_TEXT_TO_I6_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">story_title_VAR</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-bd.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Compile the I6 Story constant</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">story_headline_VAR</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-bd.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Compile the I6 Headline constant</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">story_author_VAR</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-bd.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Compile the I6 Story Author constant</span><span class="named-paragraph-number">1.3</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">story_release_number_VAR</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-bd.html#SP1_4" class="named-paragraph-link"><span class="named-paragraph">Compile the I6 Release directive</span><span class="named-paragraph-number">1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-bd.html#SP1_5" class="named-paragraph-link"><span class="named-paragraph">Compile the I6 serial number, based on the date</span><span class="named-paragraph-number">1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">encode_constant_text_bibliographically</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -451,7 +451,7 @@ next priority, and so on up the hierarchy.
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammars::emit_determination_type</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammars::emit_determination_type</span></span>:<br/>Command Grammar Lines - <a href="5-cgl.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">determination_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gty</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gty</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">term</span><span class="plain-syntax">[0].</span><span class="identifier-syntax">what</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gty</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">term</span><span class="plain-syntax">[0].</span><span class="identifier-syntax">what</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -204,7 +204,7 @@ the mistake.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PARSERERROR_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_constant_to_kind_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val_promoting</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -257,7 +257,7 @@ the mistake.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">AND_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="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">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</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">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</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">prop</span><span class="plain-syntax">) </span><span class="identifier-syntax">Calculus::Deferrals::emit_test_of_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">Rvalues::new_self_object_constant</span><span class="plain-syntax">(), </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>

View file

@ -903,7 +903,7 @@ the I6 parser's standard algorithm, which looks at the <span class="extract"><sp
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">f_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
@ -914,7 +914,7 @@ the I6 parser's standard algorithm, which looks at the <span class="extract"><sp
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">g_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
@ -1077,7 +1077,7 @@ alter the value of <span class="extract"><span class="extract-syntax">self</span
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandGeneralTokens::test_parse_visible_property</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">UnderstandGeneralTokens::test_parse_visible_property</span></span>:<br/><a href="5-gpr.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>

View file

@ -308,7 +308,7 @@ instruction because we're not compiling a loop.)
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ends</span><span class="plain-syntax">[</span><span class="identifier-syntax">end</span><span class="plain-syntax">].</span><span class="identifier-syntax">anchor_condition_set</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::code</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
@ -764,7 +764,7 @@ actually running:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DURINGSCENEMATCHING_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</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">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stuck</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -337,7 +337,7 @@ of brackets never does any harm; so we always compile one.
<span class="plain-syntax"> </span><span class="comment-syntax"> purely for problem recovery:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_PHRASE_OPTION_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP14_3" class="named-paragraph-link"><span class="named-paragraph">Compile a phrase option test</span><span class="named-paragraph-number">14.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -355,7 +355,7 @@ of brackets never does any harm; so we always compile one.
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Compiled malformed LOGICAL_NOT_NT"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">NOT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP14">&#167;14</a>.</li></ul>
@ -376,8 +376,8 @@ of brackets never does any harm; so we always compile one.
<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_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">LOGICAL_AND_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">AND_BIP</span><span 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_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">LOGICAL_OR_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">OR_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_operand</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_operand</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_operand</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_operand</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP14">&#167;14</a>.</li></ul>

View file

@ -72,7 +72,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">values</a></li><li><a href="index.html#2">Chapter 2: Specifications</a></li><li><b>Lvalues</b></li></ul></div>
<p class="purpose">Storage locations into which rvalues can be put at run-time.</p>
<ul class="toc"><li><a href="2-lvl.html#SP1">&#167;1. Creation</a></li><li><a href="2-lvl.html#SP7">&#167;7. Testing</a></li><li><a href="2-lvl.html#SP10">&#167;10. Pretty-printing</a></li><li><a href="2-lvl.html#SP11">&#167;11. Compilation</a></li><li><a href="2-lvl.html#SP13">&#167;13. Rvalue compilation</a></li><li><a href="2-lvl.html#SP14">&#167;14. Lvalue compilation</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="2-lvl.html#SP1">&#167;1. Creation</a></li><li><a href="2-lvl.html#SP7">&#167;7. Testing</a></li><li><a href="2-lvl.html#SP10">&#167;10. Pretty-printing</a></li><li><a href="2-lvl.html#SP11">&#167;11. Compilation</a></li><li><a href="2-lvl.html#SP13">&#167;13. Rvalue compilation</a></li><li><a href="2-lvl.html#SP15">&#167;15. Lvalue compilation</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Creation. </b>"Lvalues" can occur on the left of an assignment sign: they are values
which can be written to.
@ -421,7 +421,7 @@ evaluating to the contents of the storage item specified.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::emit_weak_id_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-lvl.html#SP13_3_2" class="named-paragraph-link"><span class="named-paragraph">Emit the property's owner</span><span class="named-paragraph-number">13.3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_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">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
@ -480,10 +480,10 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::ref_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">SELF_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lvl.html#SP13_3">&#167;13.3</a>.</li></ul>
@ -507,9 +507,9 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BEGIN_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">COMPILATION_MODE_EXIT</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEREFERENCE_POINTERS_CMODE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">END_COMPILATION_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
@ -524,9 +524,18 @@ object as produced the original text containing the substitution.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="2-lvl.html#SP14" class="function-link"><span class="function-syntax">Lvalues::compile_table_reference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">, </span><span class="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="reserved-syntax">return</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lvl.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lvalues::compile_table_reference</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Lvalues::compile_table_reference</span></span>:<br/><a href="2-lvl.html#SP13_5">&#167;13.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">exists</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">blank_out</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">lookup</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">TABLELOOKUPENTRY_HL</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">lookup_corr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">TABLELOOKUPCORR_HL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TABLE_EXISTENCE_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">exists</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lookup</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXISTSTABLELOOKUPENTRY_HL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lookup_corr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXISTSTABLELOOKUPCORR_HL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -547,9 +556,9 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> </span><span class="identifier-syntax">local_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ct_1_lv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::find_internal</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"ct_1"</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">ct_1_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">ct_1_lv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ct_0_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ct_1_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">blank_out</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax">))) {</span>
@ -568,10 +577,10 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">lookup</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">blank_out</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax">))) {</span>
@ -587,11 +596,11 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">lookup_corr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">BLANK_OUT_CMODE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">blank_out</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="identifier-syntax">TEST_COMPILATION_MODE</span><span class="plain-syntax">(</span><span class="identifier-syntax">TREAT_AS_LVALUE_CMODE</span><span class="plain-syntax">))) {</span>
@ -601,10 +610,9 @@ object as produced the original text containing the substitution.
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"TABLE REFERENCE with bad number of args"</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="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-lvl.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Lvalue compilation. </b>To recap, if an assignment takes the form "now X is Y" then X is the lvalue,
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Lvalue compilation. </b>To recap, if an assignment takes the form "now X is Y" then X is the lvalue,
Y is the rvalue. We only need to read Y, but we need to write X. Compilation
applied to an lvalue specification produces code suitable for reading it, i.e.,
suitable for use in position Y &mdash; but not in general suitable for X.
@ -633,7 +641,7 @@ change if arbitrary-precision integers are ever added to Inform, for instance.
<span class="definition-keyword">define</span> <span class="constant-syntax">DECREASE_BY_POINTER</span><span class="plain-syntax"> </span><span class="constant-syntax">9</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">Lvalues::storage_class_schema</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Lvalues::storage_class_schema</span></span>:<br/><a href="2-lvl.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">storage_class</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind_of_store</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">Lvalues::storage_class_schema</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Lvalues::storage_class_schema</span></span>:<br/><a href="2-lvl.html#SP16">&#167;16</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">storage_class</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind_of_store</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">reducing_modulo_1440</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">kind_of_store</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">STORE_WORD_TO_WORD:</span>
@ -729,7 +737,7 @@ change if arbitrary-precision integers are ever added to Inform, for instance.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>Here we supply advice on whether shallow or deep copies are needed. <span class="extract"><span class="extract-syntax">inc</span></span> is
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>Here we supply advice on whether shallow or deep copies are needed. <span class="extract"><span class="extract-syntax">inc</span></span> is
positive if we're incrementing what's there, negative if decrementing, zero
if simply setting.
</p>
@ -764,7 +772,7 @@ if simply setting.
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">KT</span><span class="plain-syntax"> = </span><a href="3-tod.html#SP3" class="function-link"><span class="function-syntax">TimesOfDay::kind</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">KT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">left</span><span class="plain-syntax">, </span><span class="identifier-syntax">KT</span><span class="plain-syntax">))) </span><span class="identifier-syntax">reduce</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-lvl.html#SP14" class="function-link"><span class="function-syntax">Lvalues::storage_class_schema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">storage_class</span><span class="plain-syntax">, </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">reduce</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-lvl.html#SP15" class="function-link"><span class="function-syntax">Lvalues::storage_class_schema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">storage_class</span><span class="plain-syntax">, </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">reduce</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -782,7 +782,7 @@ kinds of value:
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">SEQUENTIAL_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">()); </span><span class="identifier-syntax">downs</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileSpecifications::to_code_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">downs</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">()); </span><span class="identifier-syntax">downs</span><span class="plain-syntax">--; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>

View file

@ -104,7 +104,7 @@ for creating and using them.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-dsc.html#SP3" class="function-link"><span class="function-syntax">Descriptions::from_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_kind</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Specifications::to_kind</span></span>:<br/><a href="2-spc.html#SP6">&#167;6</a><br/>Rvalues - <a href="2-rvl.html#SP23">&#167;23</a><br/>Lvalues - <a href="2-lvl.html#SP11_4">&#167;11.4</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Conditions - <a href="2-cnd.html#SP11">&#167;11</a><br/>Descriptions - <a href="2-dsc.html#SP11">&#167;11</a><br/>Literal Lists - <a href="3-ll.html#SP8_1">&#167;8.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_4">&#167;18.4</a><br/>Parse Invocations - <a href="4-pi.html#SP4_2">&#167;4.2</a>, <a href="4-pi.html#SP5_1">&#167;5.1</a><br/>Dash - <a href="5-dsh.html#SP9_1_1_3_1">&#167;9.1.1.3.1</a>, <a href="5-dsh.html#SP10_6">&#167;10.6</a>, <a href="5-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="5-dsh.html#SP10_9_1_1_4">&#167;10.9.1.1.4</a>, <a href="5-dsh.html#SP10_9_1_1_5">&#167;10.9.1.1.5</a>, <a href="5-dsh.html#SP10_9_1_1_5_2">&#167;10.9.1.1.5.2</a>, <a href="5-dsh.html#SP10_9_1_2_2">&#167;10.9.1.2.2</a>, <a href="5-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="5-dsh.html#SP10_9_1_2_3_3">&#167;10.9.1.2.3.3</a>, <a href="5-dsh.html#SP10_9_1_2_4">&#167;10.9.1.2.4</a>, <a href="5-dsh.html#SP12">&#167;12</a>, <a href="5-dsh.html#SP13_1_1">&#167;13.1.1</a>, <a href="5-dsh.html#SP18_5_1">&#167;18.5.1</a>, <a href="5-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="5-dsh.html#SP18_5_4">&#167;18.5.4</a>, <a href="5-dsh.html#SP18_6_1">&#167;18.6.1</a>, <a href="5-dsh.html#SP18_6_1_1">&#167;18.6.1.1</a>, <a href="5-dsh.html#SP18_6_2_1">&#167;18.6.2.1</a>, <a href="5-dsh.html#SP24">&#167;24</a>, <a href="5-dsh.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_kind</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Specifications::to_kind</span></span>:<br/><a href="2-spc.html#SP6">&#167;6</a><br/>Rvalues - <a href="2-rvl.html#SP23">&#167;23</a><br/>Lvalues - <a href="2-lvl.html#SP11_4">&#167;11.4</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Conditions - <a href="2-cnd.html#SP11">&#167;11</a><br/>Descriptions - <a href="2-dsc.html#SP11">&#167;11</a><br/>Literal Real Numbers - <a href="3-lrn.html#SP6">&#167;6</a><br/>Literal Lists - <a href="3-ll.html#SP8_1">&#167;8.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_4">&#167;18.4</a><br/>Parse Invocations - <a href="4-pi.html#SP4_2">&#167;4.2</a>, <a href="4-pi.html#SP5_1">&#167;5.1</a><br/>Dash - <a href="5-dsh.html#SP9_1_1_3_1">&#167;9.1.1.3.1</a>, <a href="5-dsh.html#SP10_6">&#167;10.6</a>, <a href="5-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="5-dsh.html#SP10_9_1_1_4">&#167;10.9.1.1.4</a>, <a href="5-dsh.html#SP10_9_1_1_5">&#167;10.9.1.1.5</a>, <a href="5-dsh.html#SP10_9_1_1_5_2">&#167;10.9.1.1.5.2</a>, <a href="5-dsh.html#SP10_9_1_2_2">&#167;10.9.1.2.2</a>, <a href="5-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="5-dsh.html#SP10_9_1_2_3_3">&#167;10.9.1.2.3.3</a>, <a href="5-dsh.html#SP10_9_1_2_4">&#167;10.9.1.2.4</a>, <a href="5-dsh.html#SP12">&#167;12</a>, <a href="5-dsh.html#SP13_1_1">&#167;13.1.1</a>, <a href="5-dsh.html#SP18_5_1">&#167;18.5.1</a>, <a href="5-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="5-dsh.html#SP18_5_4">&#167;18.5.4</a>, <a href="5-dsh.html#SP18_6_1">&#167;18.6.1</a>, <a href="5-dsh.html#SP18_6_1_1">&#167;18.6.1.1</a>, <a href="5-dsh.html#SP18_6_2_1">&#167;18.6.2.1</a>, <a href="5-dsh.html#SP24">&#167;24</a>, <a href="5-dsh.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">AMBIGUITY_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP3" class="function-link"><span class="function-syntax">Specifications::is_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-dsc.html#SP3" class="function-link"><span class="function-syntax">Descriptions::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>

View file

@ -120,7 +120,7 @@ misses out.
<span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lrn.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Parse a decimal expansion</span><span class="named-paragraph-number">1.3</span></a></span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">intcount</span><span class="Preform-plain-syntax"> + </span><span class="Preform-identifier-syntax">fraccount</span><span class="Preform-plain-syntax"> &gt; </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">Wordings::length</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">) &gt; </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax">) || (</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">[</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">])) </span><span class="named-paragraph-container code-font"><a href="3-lrn.html#SP1_4" class="named-paragraph-link"><span class="named-paragraph">Parse an exponent</span><span class="named-paragraph-number">1.4</span></a></span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">distinctive</span><span class="Preform-plain-syntax">) || (</span><span class="Preform-identifier-syntax">TEST_COMPILATION_MODE</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">CONSTANT_CMODE</span><span class="Preform-plain-syntax">))) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">distinctive</span><span class="Preform-plain-syntax">) || (</span><a href="3-lrn.html#SP6" class="function-link"><span class="Preform-function-syntax">LiteralReals::promote</span></a><span class="Preform-plain-syntax">())) {</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><a href="3-lrn.html#SP3" class="function-link"><span class="Preform-function-syntax">LiteralReals::construct_float</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">signbit</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">intv</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">fracv</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">expo</span><span class="Preform-plain-syntax">), - };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
@ -360,6 +360,31 @@ exponent increments, and we round to that power of 10 exactly.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>This upgrades a literal <span class="extract"><span class="extract-syntax">K_number</span></span> to a literal <span class="extract"><span class="extract-syntax">K_real_number</span></span> if necessary,
as it can be when performing arithmetic. Note that we do this not by running
an integer-to-real conversion inside Inform, but just by re-parsing it in a
real context: the result is therefore identical to what would have been parsed
had the literal in question been expected to be real all along.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">promoting_reals</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LiteralReals::promote</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">LiteralReals::promote</span></span>:<br/><a href="3-lrn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">promoting_reals</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">LiteralReals::promote_number_if_necessary</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</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">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">promoting_reals</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">promoting_reals</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_real_number</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-literal-real-number&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't parse integer as real"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">promoting_reals</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-lp.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-vm.html">1</a></li><li class="progresschapter"><a href="2-spc.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-pl.html">pl</a></li><li class="progresssection"><a href="3-lp.html">lp</a></li><li class="progresscurrent">lrn</li><li class="progresssection"><a href="3-tod.html">tod</a></li><li class="progresssection"><a href="3-ul.html">ul</a></li><li class="progresssection"><a href="3-ll.html">ll</a></li><li class="progresschapter"><a href="4-ets.html">4</a></li><li class="progresschapter"><a href="5-dsh.html">5</a></li><li class="progressnext"><a href="3-tod.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -131,7 +131,7 @@ support for times of day from the Inform language. If so, <span class="extract">
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">TimesOfDay::kind</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">TimesOfDay::kind</span></span>:<br/>Rvalues - <a href="2-rvl.html#SP14">&#167;14</a><br/>Lvalues - <a href="2-lvl.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">TimesOfDay::kind</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">TimesOfDay::kind</span></span>:<br/>Rvalues - <a href="2-rvl.html#SP14">&#167;14</a><br/>Lvalues - <a href="2-lvl.html#SP16">&#167;16</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">K_time</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -1,14 +1,14 @@
100.0% in inform7 run
66.7% in compilation to Inter
25.4% in //ImperativeDefinitions::compile_first_block//
67.0% in compilation to Inter
25.6% in //ImperativeDefinitions::compile_first_block//
8.9% in //Sequence::compile_function_resources//
6.8% in //Strings::compile_responses//
6.0% in //InferenceSubjects::emit_all//
7.0% in //Strings::compile_responses//
6.3% in //InferenceSubjects::emit_all//
3.7% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
3.3% in //MajorNodes::pass_1//
2.0% in //RTRules::RulePrintingRule_routine//
1.8% in //ImperativeDefinitions::assess_all//
1.8% in //RTRules::rulebooks_array_array//
1.7% in //ImperativeDefinitions::assess_all//
0.9% in //RTVerbs::ConjugateVerb//
0.3% in //MajorNodes::pass_2//
0.3% in //RTRelations::compile_defined_relations//
@ -17,12 +17,11 @@
0.1% in //RTCommandGrammars::compile_all//
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
3.4% not specifically accounted for
3.2% not specifically accounted for
30.7% in running Inter pipeline
10.0% in step preparation
9.6% in inter step 2/12: link
7.2% in inter step 12/12: generate inform6 -> auto.inf
9.4% in inter step 2/12: link
7.0% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
@ -30,6 +29,6 @@
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.3% not specifically accounted for
2.6% not specifically accounted for
2.0% in supervisor
0.4% not specifically accounted for
0.2% not specifically accounted for

View file

@ -213,7 +213,7 @@ int BibliographicData::story_author_is(text_stream *p) {
TEMPORARY_TEXT(TEMP)
wording W = Node::get_text(spec);
int w1 = Wordings::first_wn(W);
BibliographicData::compile_bibliographic_text(TEMP, Lexer::word_text(w1));
BibliographicData::compile_bibliographic_text(TEMP, Lexer::word_text(w1), HTML_BIBTEXT_MODE);
if (Str::eq(TEMP, p)) result = TRUE;
DISCARD_TEXT(TEMP)
return result;
@ -259,14 +259,19 @@ on global variables, which allow the bibliographic text writing code to
configure Inform for its current purposes. On non-empty strings this routine
therefore splits into one of three independent methods.
@d XML_BIBTEXT_MODE 1
@d TRUNCATE_BIBTEXT_MODE 2
@d I6_BIBTEXT_MODE 3
@d HTML_BIBTEXT_MODE 4
=
void BibliographicData::compile_bibliographic_text(OUTPUT_STREAM, wchar_t *p) {
void BibliographicData::compile_bibliographic_text(OUTPUT_STREAM, wchar_t *p, int mode) {
if (p == NULL) return;
if (TEST_COMPILATION_MODE(COMPILE_TEXT_TO_XML_CMODE))
if (mode == XML_BIBTEXT_MODE)
@<Compile bibliographic text as XML respecting Treaty of Babel rules@>;
if (TEST_COMPILATION_MODE(TRUNCATE_TEXT_CMODE))
if (mode == TRUNCATE_BIBTEXT_MODE)
@<Compile bibliographic text as a truncated filename@>;
if (TEST_COMPILATION_MODE(COMPILE_TEXT_TO_I6_CMODE))
if ((encode_constant_text_bibliographically) || (mode == I6_BIBTEXT_MODE))
@<Compile bibliographic text as an I6 string@>
@<Compile bibliographic text as HTML@>;
}
@ -382,7 +387,7 @@ otherwise it's much the same.
@ This code is used to work out a good filename for something given a name
inside Inform. For instance, if a project is called
>> "St. Bartholemew's Fair: \'Etude for a Push-Me/Pull-You Machine"
>> "St. Bartholemew's Fair: Etude for a Push-Me/Pull-You Machine"
then what would be a good filename for its released story file?

View file

@ -364,10 +364,7 @@ void ReleaseInstructions::write_ifiction_and_blurb(void) {
filename *F = Task::ifiction_record_file();
if (STREAM_OPEN_TO_FILE(xf, F, UTF8_ENC) == FALSE)
Problems::fatal_on_file("Can't open metadata file", F);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(COMPILE_TEXT_TO_XML_CMODE);
iFiction::write_ifiction_record(xf, rel);
END_COMPILATION_MODE;
STREAM_CLOSE(xf);
@<Write release blurb@> =

View file

@ -44,10 +44,7 @@ the Blorb-file's filename won't be too long for the file system.
@<Compose the blorbed story filename into the TEMP stream@> =
if ((story_title_VAR != NULL) &&
(VariableSubjects::has_initial_value_set(story_title_VAR))) {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(TRUNCATE_TEXT_CMODE);
BlurbFile::write_var_to_text(TEMP, story_title_VAR);
END_COMPILATION_MODE;
BlurbFile::write_var_to_text(TEMP, story_title_VAR, TRUNCATE_BIBTEXT_MODE);
} else WRITE_TO(TEMP, "story");
WRITE_TO(TEMP, ".%S", TargetVMs::get_blorbed_extension(Task::vm()));
@ -122,42 +119,37 @@ brackets [THUS].
if (VariableSubjects::has_initial_value_set(story_release_number_VAR)) {
WRITE("placeholder [RELEASE] = \"");
BlurbFile::write_var_to_text(OUT, story_release_number_VAR);
BlurbFile::write_var_to_text(OUT, story_release_number_VAR, XML_BIBTEXT_MODE);
WRITE("\"\n");
} else WRITE("placeholder [RELEASE] = \"1\"\n");
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(COMPILE_TEXT_TO_XML_CMODE);
if (VariableSubjects::has_initial_value_set(story_creation_year_VAR)) {
WRITE("placeholder [YEAR] = \"");
BlurbFile::write_var_to_text(OUT, story_creation_year_VAR);
BlurbFile::write_var_to_text(OUT, story_creation_year_VAR, XML_BIBTEXT_MODE);
WRITE("\"\n");
} else WRITE("placeholder [YEAR] = \"%d\"\n", (the_present->tm_year)+1900);
if (VariableSubjects::has_initial_value_set(story_title_VAR)) {
NonlocalVariables::initial_value_as_plain_text(story_title_VAR);
WRITE("placeholder [TITLE] = \"");
BlurbFile::write_var_to_text(OUT, story_title_VAR);
BlurbFile::write_var_to_text(OUT, story_title_VAR, XML_BIBTEXT_MODE);
WRITE("\"\n");
} else WRITE("placeholder [TITLE] = \"Untitled\"\n");
if (VariableSubjects::has_initial_value_set(story_author_VAR)) {
NonlocalVariables::initial_value_as_plain_text(story_author_VAR);
WRITE("placeholder [AUTHOR] = \"");
BlurbFile::write_var_to_text(OUT, story_author_VAR);
BlurbFile::write_var_to_text(OUT, story_author_VAR, XML_BIBTEXT_MODE);
WRITE("\"\n");
} else WRITE("placeholder [AUTHOR] = \"Anonymous\"\n");
if (VariableSubjects::has_initial_value_set(story_description_VAR)) {
NonlocalVariables::initial_value_as_plain_text(story_description_VAR);
WRITE("placeholder [BLURB] = \"");
BlurbFile::write_var_to_text(OUT, story_description_VAR);
BlurbFile::write_var_to_text(OUT, story_description_VAR, XML_BIBTEXT_MODE);
WRITE("\"\n");
} else WRITE("placeholder [BLURB] = \"A work of interactive fiction.\"\n");
END_COMPILATION_MODE;
@<Give instructions about source text, solution and library card@> =
if (rel->release_source) {
if (rel->source_public) WRITE("source public\n"); else WRITE("source\n");
@ -328,7 +320,7 @@ void BlurbFile::visit_to_quote(OUTPUT_STREAM, parse_node *p) {
}
@ =
int BlurbFile::write_var_to_text(OUTPUT_STREAM, nonlocal_variable *nlv) {
int BlurbFile::write_var_to_text(OUTPUT_STREAM, nonlocal_variable *nlv, int mode) {
if ((nlv) && (VariableSubjects::has_initial_value_set(nlv))) {
parse_node *val =
NonlocalVariables::substitute_constants(
@ -340,14 +332,14 @@ int BlurbFile::write_var_to_text(OUTPUT_STREAM, nonlocal_variable *nlv) {
} else {
if (Kinds::eq(K, K_number)) {
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
Specifications::Compiler::compile_constant_to_kind_vh(&VH, val, K);
CompileSpecifications::holster_constant(&VH, val, K);
inter_ti v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH, &v1, &v2);
WRITE("%d", (inter_ti) v2);
} else {
wording W = Node::get_text(val);
int w1 = Wordings::first_wn(W);
BibliographicData::compile_bibliographic_text(OUT, Lexer::word_text(w1));
BibliographicData::compile_bibliographic_text(OUT, Lexer::word_text(w1), mode);
}
}
return TRUE;

View file

@ -224,14 +224,14 @@ int iFiction::write_var_to_XML(OUTPUT_STREAM, nonlocal_variable *nlv) {
} else {
if (Kinds::eq(K, K_number)) {
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
Specifications::Compiler::compile_constant_to_kind_vh(&VH, val, K);
CompileSpecifications::holster_constant(&VH, val, K);
inter_ti v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH, &v1, &v2);
WRITE("%d", (inter_ti) v2);
} else {
wording W = Node::get_text(val);
int w1 = Wordings::first_wn(W);
BibliographicData::compile_bibliographic_text(OUT, Lexer::word_text(w1));
BibliographicData::compile_bibliographic_text(OUT, Lexer::word_text(w1), XML_BIBTEXT_MODE);
}
}
return TRUE;

View file

@ -93,7 +93,7 @@ int Calculus::Deferrals::Cinders::cind_find_in_term_emit(pcalc_term *pt, int cin
if (pt->constant) {
if (Calculus::Deferrals::Cinders::spec_needs_to_be_cindered(pt->constant)) {
pt->cinder = cinder_number++;
Specifications::Compiler::emit_as_val(K_value, pt->constant);
CompileSpecifications::to_code_val(K_value, pt->constant);
current_pdef->cinder_kinds[pt->cinder] =
Specifications::to_kind(pt->constant);
*started = TRUE;

View file

@ -1,7 +1,10 @@
[Specifications::Compiler::] Compiling from Specifications.
[CompileSpecifications::] Compiling from Specifications.
To compile specifications into Inter values, conditions or void expressions.
@ Specifications unite values, conditions and descriptions: see //values: Specifications//.
They are stored as |parse_node| pointers. Here, we compile them to a
@ In a more traditional compiler, the code-generator would be something of a
landmark -- one of the three or four most important stations. Here it's
something of an anticlimax, partly because traditional "code" -- values
@ -41,16 +44,10 @@ enter or exit macros to switch a particular mode on or off.
@d DEREFERENCE_POINTERS_CMODE 0x00000001 /* make an independent copy of the result if on the heap */
@d IMPLY_NEWLINES_IN_SAY_CMODE 0x00000010 /* at the end, that is */
@d PERMIT_LOCALS_IN_TEXT_CMODE 0x00000020 /* unless casting to text */
@d COMPILE_TEXT_TO_QUOT_CMODE 0x00000080 /* for the idiosyncratic I6 |box| statement */
@d COMPILE_TEXT_TO_XML_CMODE 0x00000100 /* use XML escapes and UTF-8 encoding */
@d TRUNCATE_TEXT_CMODE 0x00000200 /* into a plausible filename length */
@d COMPILE_TEXT_TO_I6_CMODE 0x00001000 /* for bibliographic text to I6 constants */
@d CONSTANT_CMODE 0x00002000 /* compiling values in a constant context */
@d SPECIFICATIONS_CMODE 0x00004000 /* compiling specifications at all */
@d BLANK_OUT_CMODE 0x00008000 /* blank out table references */
@d TREAT_AS_LVALUE_CMODE 0x00010000 /* similarly affects table references */
@d JUST_ROUTINE_CMODE 0x00020000 /* similarly affects table references */
@d TABLE_EXISTENCE_CMODE 0x00040000 /* test table references for existence */
@d TREAT_AS_LVALUE_CMODE 0x00010000 /* compile storage as lvalue not rvalue */
@d JUST_ROUTINE_CMODE 0x00020000 /* compile storage to Inter function handling it */
= (early code)
int compilation_mode = DEREFERENCE_POINTERS_CMODE + IMPLY_NEWLINES_IN_SAY_CMODE; /* default */
@ -73,30 +70,83 @@ code to handle dereferencing is invalid as an Inform 6 constant. The mode
therefore exists as a way of temporarily turning off dereferencing -- by
default, it is always on.
@ The outer shell here has two purposes. One is to copy the specification
onto the local stack frame and then compile that copy -- useful since
compilation may alter its contents. The other purpose, and this is not to
be dismissed lightly, is to ensure correct indentation in the log when
we exit unexpectedly, for instance due to a problem.
@ And the same in a constant context:
@ =
void Specifications::Compiler::compile_inner(value_holster *VH, parse_node *spec) {
LOGIF(EXPRESSIONS, "Compiling: $P\n", spec);
spec = NonlocalVariables::substitute_constants(spec);
=
void CompileSpecifications::to_array_entry(parse_node *spec) {
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
CompileSpecifications::to_holster(&VH, spec, TRUE);
inter_ti v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH, &v1, &v2);
Emit::array_generic_entry(v1, v2);
}
void CompileSpecifications::to_array_entry_promoting(parse_node *value, kind *K_wanted) {
CompileSpecifications::to_array_entry(
CompileSpecifications::cast(value, K_wanted));
}
void CompileSpecifications::to_code_val(kind *K, parse_node *spec) {
value_holster VH = Holsters::new(INTER_VAL_VHMODE);
CompileSpecifications::to_holster(&VH, spec, FALSE);
}
@ A variation on this is to compile a specification which represents
a value in a context where a particular kind of value is expected:
=
void CompileSpecifications::to_code_val_promoting(parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
kind *K_found = Specifications::to_kind(value);
RTKinds::notify_of_use(K_found);
if ((K_understanding) && (Kinds::eq(K_wanted, K_understanding)) && (Kinds::eq(K_found, K_text))) {
Node::set_kind_of_value(value, K_understanding);
K_found = K_understanding;
}
int down = FALSE;
RTKinds::emit_cast_call(K_found, K_wanted, &down);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(SPECIFICATIONS_CMODE);
LOG_INDENT;
parse_node breakable_copy = *spec;
Specifications::Compiler::spec_compile_primitive(VH, &breakable_copy);
LOG_OUTDENT;
COMPILATION_MODE_ENTER(PERMIT_LOCALS_IN_TEXT_CMODE);
CompileSpecifications::to_code_val(K_value, value);
END_COMPILATION_MODE;
if (down) Produce::up(Emit::tree());
}
void CompileSpecifications::holster_constant(value_holster *VH, parse_node *value, kind *K_wanted) {
CompileSpecifications::to_holster(VH,
CompileSpecifications::cast(value, K_wanted), TRUE);
}
parse_node *CompileSpecifications::cast(parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
value = LiteralReals::promote_number_if_necessary(value, K_wanted);
return value;
}
void CompileSpecifications::to_pair(inter_ti *v1, inter_ti *v2, parse_node *spec) {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
CompileSpecifications::to_holster(&VH, spec, FALSE);
Holsters::unholster_pair(&VH, v1, v2);
END_COMPILATION_MODE;
}
@ So this is where the compilation is done, or rather, delegated:
void CompileSpecifications::to_holster(value_holster *VH, parse_node *spec, int c) {
LOGIF(EXPRESSIONS, "Compiling: $P\n", spec);
BEGIN_COMPILATION_MODE;
if (c) {
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
COMPILATION_MODE_ENTER(CONSTANT_CMODE);
}
spec = NonlocalVariables::substitute_constants(spec);
=
void Specifications::Compiler::spec_compile_primitive(value_holster *VH, parse_node *spec) {
LOG_INDENT;
kind *K_found = Specifications::to_kind(spec);
RTKinds::notify_of_use(K_found);
@ -114,8 +164,9 @@ void Specifications::Compiler::spec_compile_primitive(value_holster *VH, parse_n
Lvalues::compile(VH, spec);
} else if (Rvalues::is_rvalue(spec)) {
Rvalues::compile(VH, spec);
if ((VH->vhmode_provided == INTER_DATA_VHMODE) && (VH->vhmode_wanted == INTER_VAL_VHMODE)) {
Holsters::to_val_mode(Emit::tree(), VH);
if ((VH->vhmode_provided == INTER_DATA_VHMODE) &&
(VH->vhmode_wanted == INTER_VAL_VHMODE)) {
Holsters::unholster_to_code_val(Emit::tree(), VH);
}
} else if (Specifications::is_condition(spec)) {
Conditions::compile(VH, spec);
@ -123,88 +174,6 @@ void Specifications::Compiler::spec_compile_primitive(value_holster *VH, parse_n
if (dereffed) {
Produce::up(Emit::tree());
}
}
@ A variation on this is to compile a specification which represents
a value in a context where a particular kind of value is expected:
=
void Specifications::Compiler::emit_to_kind(parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
kind *K_found = Specifications::to_kind(value);
RTKinds::notify_of_use(K_found);
if ((K_understanding) && (Kinds::eq(K_wanted, K_understanding)) && (Kinds::eq(K_found, K_text))) {
Node::set_kind_of_value(value, K_understanding);
K_found = K_understanding;
}
int down = FALSE;
RTKinds::emit_cast_call(K_found, K_wanted, &down);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(PERMIT_LOCALS_IN_TEXT_CMODE);
Specifications::Compiler::emit_as_val(K_value, value);
END_COMPILATION_MODE;
if (down) Produce::up(Emit::tree());
}
@ And the same in a constant context:
=
void Specifications::Compiler::compile_constant_to_kind_vh(value_holster *VH, parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
COMPILATION_MODE_ENTER(CONSTANT_CMODE);
Specifications::Compiler::compile_inner(VH, Specifications::Compiler::cast_constant(value, K_wanted));
LOG_OUTDENT;
END_COMPILATION_MODE;
}
void Specifications::Compiler::emit_constant_to_kind(parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
COMPILATION_MODE_ENTER(CONSTANT_CMODE);
parse_node *casted = Specifications::Compiler::cast_constant(value, K_wanted);
END_COMPILATION_MODE;
Specifications::Compiler::emit(casted);
}
void Specifications::Compiler::emit_constant_to_kind_as_val(parse_node *value, kind *K_wanted) {
RTKinds::notify_of_use(K_wanted);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
COMPILATION_MODE_ENTER(CONSTANT_CMODE);
parse_node *casted = Specifications::Compiler::cast_constant(value, K_wanted);
END_COMPILATION_MODE;
Specifications::Compiler::emit_as_val(K_value, casted);
}
parse_node *Specifications::Compiler::cast_constant(parse_node *value, kind *to) {
kind *from = Specifications::to_kind(value);
if ((Kinds::eq(from, K_number)) && (Kinds::eq(to, K_real_number))) {
wording W = Node::get_text(value);
if (<s-literal-real-number>(W)) value = <<rp>>;
else internal_error("can't parse integer as real");
}
return value;
}
void Specifications::Compiler::emit(parse_node *spec) {
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
COMPILATION_MODE_ENTER(CONSTANT_CMODE);
Specifications::Compiler::compile_inner(&VH, spec);
END_COMPILATION_MODE;
inter_ti v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH, &v1, &v2);
Emit::array_generic_entry(v1, v2);
}
void Specifications::Compiler::emit_as_val(kind *K, parse_node *spec) {
value_holster VH = Holsters::new(INTER_VAL_VHMODE);
Specifications::Compiler::compile_inner(&VH, spec);
}

View file

@ -193,7 +193,7 @@ The value of |cinder_count| would then be 2.
Produce::inv_call_iname(Emit::tree(), pdef->ppd_iname);
Produce::down(Emit::tree());
Calculus::Deferrals::Cinders::find_emit(prop, pdef);
if (substitution) Specifications::Compiler::emit_as_val(K_value, substitution);
if (substitution) CompileSpecifications::to_code_val(K_value, substitution);
Produce::up(Emit::tree());
@ =
@ -598,7 +598,7 @@ void Calculus::Deferrals::emit_number_of_S(parse_node *spec) {
if (Calculus::Deferrals::spec_is_variable_of_kind_description(spec)) {
Produce::inv_primitive(Emit::tree(), INDIRECT1_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) NUMBER_OF_DUSAGE);
Produce::up(Emit::tree());
} else {
@ -662,7 +662,7 @@ void Calculus::Deferrals::emit_list_of_S(parse_node *spec, kind *K) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(LIST_OF_TY_DESC_HL));
Produce::down(Emit::tree());
Frames::emit_new_local_value(K);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
RTKinds::emit_strong_id_as_val(Kinds::unary_construction_material(K));
Produce::up(Emit::tree());
} else {
@ -694,7 +694,7 @@ void Calculus::Deferrals::emit_random_of_S(parse_node *spec) {
if (Calculus::Deferrals::spec_is_variable_of_kind_description(spec)) {
Produce::inv_primitive(Emit::tree(), INDIRECT1_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) RANDOM_OF_DUSAGE);
Produce::up(Emit::tree());
} else {
@ -745,7 +745,7 @@ void Calculus::Deferrals::emit_total_of_S(property *prn, parse_node *spec) {
Produce::up(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT1_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) TOTAL_DUSAGE);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@ -767,9 +767,9 @@ void Calculus::Deferrals::emit_substitution_test(parse_node *in,
if (Calculus::Deferrals::spec_is_variable_of_kind_description(spec)) {
Produce::inv_primitive(Emit::tree(), INDIRECT2_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) CONDITION_DUSAGE);
Specifications::Compiler::emit_as_val(K_value, in);
CompileSpecifications::to_code_val(K_value, in);
Produce::up(Emit::tree());
} else {
Calculus::Deferrals::emit_test_of_proposition(
@ -820,7 +820,7 @@ void Calculus::Deferrals::emit_extremal_of_S(parse_node *spec,
Produce::up(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT1_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) EXTREMAL_DUSAGE);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@ -948,9 +948,9 @@ void Calculus::Deferrals::emit_repeat_through_domain_S(parse_node *spec,
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT2_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) CONDITION_DUSAGE);
Specifications::Compiler::emit_as_val(K_value,
CompileSpecifications::to_code_val(K_value,
Lvalues::new_LOCAL_VARIABLE(EMPTY_WORDING, v1));
Produce::up(Emit::tree());
Produce::code(Emit::tree());
@ -1037,7 +1037,7 @@ deferred description routine, and we simply call that routine with the
void Calculus::Deferrals::emit_repeat_call(parse_node *spec, local_variable *fromv) {
Produce::inv_primitive(Emit::tree(), INDIRECT2_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) LOOP_DOMAIN_DUSAGE);
if (fromv) {
inter_symbol *fromv_s = LocalVariables::declare(fromv);
@ -1108,7 +1108,7 @@ void Calculus::Deferrals::emit_loop_over_list_S(parse_node *spec, local_variable
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, copy_var_s);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
Produce::inv_primitive(Emit::tree(), SEQUENTIAL_BIP);
Produce::down(Emit::tree());

View file

@ -164,8 +164,8 @@ void EmitSchemas::sch_inline(value_holster *VH,
req_A = NULL;
if (!((Kinds::Behaviour::uses_pointer_values(req_B)) && (Kinds::Behaviour::definite(req_B))))
req_B = NULL;
Specifications::Compiler::emit_to_kind(spec_A, req_A);
Specifications::Compiler::emit_to_kind(spec_B, req_B);
CompileSpecifications::to_code_val_promoting(spec_A, req_A);
CompileSpecifications::to_code_val_promoting(spec_B, req_B);
epar = FALSE;
}
}

View file

@ -319,9 +319,9 @@ function like |log pi|, where |X| is the function (in this case |log|) and
}
@<Emit the X-operand@> =
if (X) Specifications::Compiler::emit_to_kind(X, KX);
if (X) CompileSpecifications::to_code_val_promoting(X, KX);
else EquationSolver::compile_enode(eqn, EX);
@<Emit the Y-operand@> =
if (Y) Specifications::Compiler::emit_to_kind(Y, KY);
if (Y) CompileSpecifications::to_code_val_promoting(Y, KY);
else EquationSolver::compile_enode(eqn, EY);

View file

@ -450,7 +450,7 @@ the data into |sw_v| with a single |STORE_BIP| instruction, which is much faster
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, sw_v);
Specifications::Compiler::emit_as_val(switch_kind, switch_val);
CompileSpecifications::to_code_val(switch_kind, switch_val);
Produce::up(Emit::tree());
@ Now we handle the switch case for what to do when |sw_v| is |case_spec|. The count
@ -495,14 +495,14 @@ of |downs| is how many times we have called |Produce::down|.
@<Begin a non-pointery switch@> =
Produce::inv_primitive(Emit::tree(), SWITCH_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(switch_kind, switch_val);
CompileSpecifications::to_code_val(switch_kind, switch_val);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
@<Handle a non-pointery case@> =
Produce::inv_primitive(Emit::tree(), CASE_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(switch_kind, case_spec);
CompileSpecifications::to_code_val(switch_kind, case_spec);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
statement_count = CompileBlocksAndLines::code_block(statement_count, ow_node, FALSE);

View file

@ -57,7 +57,7 @@ to the tokens then follow, and finally the optional bitmap of phrase options.
if (Kinds::Behaviour::uses_pointer_values(return_kind))
Frames::emit_new_local_value(return_kind);
for (int k=0; k<tokens->tokens_count; k++)
Specifications::Compiler::emit_to_kind(tokens->token_vals[k], tokens->token_kinds[k]);
CompileSpecifications::to_code_val_promoting(tokens->token_vals[k], tokens->token_kinds[k]);
if (phrase_options != -1)
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) phrase_options);
@ -88,11 +88,11 @@ void CallingFunctions::indirect_function_call(tokens_packet *tokens,
if (lookup_flag) {
Produce::inv_primitive(Emit::tree(), LOOKUP_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, indirect_spec);
CompileSpecifications::to_code_val(K_value, indirect_spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
Produce::up(Emit::tree());
} else {
Specifications::Compiler::emit_as_val(K_value, indirect_spec);
CompileSpecifications::to_code_val(K_value, indirect_spec);
}
int phrase_options = -1;
@<Emit the comma-separated list of arguments@>;

View file

@ -301,9 +301,6 @@ the presence of annotations can change what we do.
parse_node *supplied = tokens->token_vals[tok];
int by_value_not_reference = TRUE;
int text_as_quotation = FALSE;
int blank_out = FALSE;
int reference_exists = FALSE;
int require_to_be_lvalue = FALSE;
@<Take account of any annotation to the inline token@>;
@ -372,27 +369,12 @@ do not want.
} else {
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
}
if (blank_out) {
COMPILATION_MODE_ENTER(BLANK_OUT_CMODE);
} else {
COMPILATION_MODE_EXIT(BLANK_OUT_CMODE);
}
if (reference_exists) {
COMPILATION_MODE_ENTER(TABLE_EXISTENCE_CMODE);
} else {
COMPILATION_MODE_EXIT(TABLE_EXISTENCE_CMODE);
}
if (text_as_quotation) {
COMPILATION_MODE_ENTER(COMPILE_TEXT_TO_QUOT_CMODE);
} else {
COMPILATION_MODE_EXIT(COMPILE_TEXT_TO_QUOT_CMODE);
}
LOGIF(MATCHING, "Expanding $P into '%W' with %d, %u%s%s\n",
supplied, BRW, tok, kind_required,
changed?" (after kind substitution)":"",
by_value_not_reference?" (by value)":" (by reference)");
Specifications::Compiler::emit_to_kind(supplied, kind_required);
CompileSpecifications::to_code_val_promoting(supplied, kind_required);
END_COMPILATION_MODE;
@h Annotation commands for bracings with natural language.
@ -440,16 +422,14 @@ this list, the original will change.
@ And, variedly:
@<Inline annotation "by-reference-blank-out"@> =
by_value_not_reference = FALSE;
valid_annotation = TRUE;
blank_out = TRUE;
Lvalues::compile_table_reference(VH, supplied, FALSE, TRUE);
return; /* that is, don't use the regular token compiler: we've done it ourselves */
@ And, variedly:
@<Inline annotation "reference-exists"@> =
by_value_not_reference = FALSE;
valid_annotation = TRUE;
reference_exists = TRUE;
Lvalues::compile_table_reference(VH, supplied, TRUE, FALSE);
return; /* that is, don't use the regular token compiler: we've done it ourselves */
@ This is a variant which checks that the reference is to an lvalue, that is,
to something which can be changed. If this weren't done, then
@ -484,9 +464,10 @@ but honestly having this annotation seems the smaller of the two warts.
Problems::issue_problem_end();
return;
} else {
text_as_quotation = TRUE;
by_value_not_reference = FALSE;
valid_annotation = TRUE;
value_holster VH = Holsters::new(INTER_VAL_VHMODE);
TextLiterals::compile_quotation(&VH, Node::get_text(supplied));
Holsters::unholster_to_code_val(Emit::tree(), &VH);
return; /* that is, don't use the regular token compiler: we've done it ourselves */
}
@ Suppose we are invoking "decide on 102" from the Basic Inform inline definition
@ -533,11 +514,11 @@ problem messages are phrased differently if something goes wrong.
else @<Issue a problem for returning a value when none was asked@>;
if (allow_me == ALWAYS_MATCH) {
Specifications::Compiler::emit_to_kind(supplied, kind_needed);
CompileSpecifications::to_code_val_promoting(supplied, kind_needed);
} else if ((allow_me == SOMETIMES_MATCH) && (Kinds::Behaviour::is_object(kind_needed))) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(CHECKKINDRETURNED_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_to_kind(supplied, kind_needed);
CompileSpecifications::to_code_val_promoting(supplied, kind_needed);
Produce::val_iname(Emit::tree(), K_value, RTKinds::I6_classname(kind_needed));
Produce::up(Emit::tree());
} else @<Issue a problem for returning a value of the wrong kind@>;
@ -587,7 +568,7 @@ problem messages are phrased differently if something goes wrong.
} else {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(STORED_ACTION_TY_TRY_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_stored_action, supplied);
CompileSpecifications::to_code_val(K_stored_action, supplied);
Produce::up(Emit::tree());
}
valid_annotation = TRUE;
@ -635,7 +616,7 @@ problem messages are phrased differently if something goes wrong.
} else {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(STORED_ACTION_TY_TRY_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_stored_action, supplied);
CompileSpecifications::to_code_val(K_stored_action, supplied);
Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 1);
Produce::up(Emit::tree());
}
@ -1276,7 +1257,7 @@ result would be the same without the optimisation.
Produce::down(Emit::tree());
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Specifications::Compiler::emit_to_kind(to_say, K);
CompileSpecifications::to_code_val_promoting(to_say, K);
END_COMPILATION_MODE;
Produce::up(Emit::tree());
} else @<Issue an inline no-such-kind problem@>;
@ -1301,7 +1282,7 @@ result would be the same without the optimisation.
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Produce::inv_call_iname(Emit::tree(), Kinds::Behaviour::get_iname(K));
Produce::down(Emit::tree());
Specifications::Compiler::emit_to_kind(to_say, K);
CompileSpecifications::to_code_val_promoting(to_say, K);
Produce::up(Emit::tree());
END_COMPILATION_MODE;
}
@ -1315,7 +1296,7 @@ result would be the same without the optimisation.
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_iname(Emit::tree(), K_number, Hierarchy::find(SAY__N_HL));
Specifications::Compiler::emit_to_kind(to_say, K);
CompileSpecifications::to_code_val_promoting(to_say, K);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
return;
@ -1330,7 +1311,7 @@ language.
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_iname(Emit::tree(), K_number, Hierarchy::find(UNICODE_TEMP_HL));
Specifications::Compiler::emit_to_kind(to_say, K);
CompileSpecifications::to_code_val_promoting(to_say, K);
Produce::up(Emit::tree());
if (TargetVMs::is_16_bit(Task::vm())) {
Produce::inv_assembly(Emit::tree(), I"@print_unicode");
@ -1705,7 +1686,7 @@ void CSIInline::eval_bracket_plus(value_holster *VH, wording LW, int prim_cat) {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
END_COMPILATION_MODE;
}
@ -1761,12 +1742,8 @@ void CSIInline::eval_bracket_plus_to_text(text_stream *OUT, wording LW) {
parse_node *spec = NULL;
@<Evaluate the text as a value@>;
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
value_holster VH2 = Holsters::new(INTER_DATA_VHMODE);
Specifications::Compiler::compile_inner(&VH2, spec);
inter_ti v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH2, &v1, &v2);
CompileSpecifications::to_pair(&v1, &v2, spec);
if (v1 == ALIAS_IVAL) {
PUT(URL_SYMBOL_CHAR);
inter_symbols_table *T =
@ -1777,7 +1754,6 @@ void CSIInline::eval_bracket_plus_to_text(text_stream *OUT, wording LW) {
} else {
CodeGen::FC::val_from(OUT, Packaging::at(Emit::tree()), v1, v2);
}
END_COMPILATION_MODE;
}
@<Evaluate the text as a value@> =

View file

@ -254,7 +254,7 @@ at runtime; we assign 0 to it for the sake of tidiness.
Invocations::get_token_as_parsed(first_inv, i);
kind *to_be_used_as = Specifications::to_kind(
idb->type_data.token_sequence[i].to_match);
Specifications::Compiler::emit_to_kind(value, to_be_used_as);
CompileSpecifications::to_code_val_promoting(value, to_be_used_as);
END_COMPILATION_MODE;
}
Produce::up(Emit::tree());
@ -517,16 +517,18 @@ control structures.
stop automatically generates a newline:
@<Compile a newline if the phrase implicitly requires one@> =
if ((IDTypeData::is_a_say_phrase(Node::get_phrase_invoked(inv))) &&
(TEST_COMPILATION_MODE(IMPLY_NEWLINES_IN_SAY_CMODE)) &&
(tokens->tokens_count > 0) &&
(Rvalues::is_CONSTANT_of_kind(tokens->token_vals[0], K_text)) &&
(Word::text_ending_sentence(
Wordings::first_wn(Node::get_text(tokens->token_vals[0]))))) {
Produce::inv_primitive(Emit::tree(), PRINT_BIP);
Produce::down(Emit::tree());
Produce::val_text(Emit::tree(), I"\n");
Produce::up(Emit::tree());
if (IDTypeData::is_a_say_phrase(Node::get_phrase_invoked(inv))) {
if ((Node::get_phrase_invoked(inv)->type_data.as_say.say_phrase_running_on == FALSE) &&
(TEST_COMPILATION_MODE(IMPLY_NEWLINES_IN_SAY_CMODE)) &&
(tokens->tokens_count > 0) &&
(Rvalues::is_CONSTANT_of_kind(tokens->token_vals[0], K_text)) &&
(Word::text_ending_sentence(
Wordings::first_wn(Node::get_text(tokens->token_vals[0]))))) {
Produce::inv_primitive(Emit::tree(), PRINT_BIP);
Produce::down(Emit::tree());
Produce::val_text(Emit::tree(), I"\n");
Produce::up(Emit::tree());
}
}
@h Tokens packets.

View file

@ -215,7 +215,7 @@ void EquationSolver::compile_enode(equation *eqn, equation_node *tok) {
switch (tok->eqn_type) {
case SYMBOL_EQN:
if (tok->leaf_symbol->var_const)
Specifications::Compiler::emit_as_val(K_value, tok->leaf_symbol->var_const);
CompileSpecifications::to_code_val(K_value, tok->leaf_symbol->var_const);
else if (tok->leaf_symbol->local_map) {
if (tok->leaf_symbol->promote_local_to_real) {
Produce::inv_call_iname(Emit::tree(),
@ -236,7 +236,7 @@ void EquationSolver::compile_enode(equation *eqn, equation_node *tok) {
} else internal_error("uncompilable equation node");
break;
case CONSTANT_EQN:
Specifications::Compiler::emit_as_val(K_value, tok->leaf_constant);
CompileSpecifications::to_code_val(K_value, tok->leaf_constant);
break;
case OPERATION_EQN: @<Emit a single operation@>; break;
default: internal_error("forbidden enode found in parsed equation");

View file

@ -80,14 +80,11 @@ void IXBibliographicData::contents_heading(OUTPUT_STREAM) {
=
void IXBibliographicData::index_variable(OUTPUT_STREAM,
nonlocal_variable *nlv, text_stream *t) {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(COMPILE_TEXT_TO_XML_CMODE);
if ((nlv) && (VariableSubjects::has_initial_value_set(nlv))) {
wording W = NonlocalVariables::initial_value_as_plain_text(nlv);
BibliographicData::compile_bibliographic_text(OUT,
Lexer::word_text(Wordings::first_wn(W)));
Lexer::word_text(Wordings::first_wn(W)), XML_BIBTEXT_MODE);
} else {
WRITE("%S", t);
}
END_COMPILATION_MODE;
}

View file

@ -62,7 +62,7 @@ int Phrases::Condition::generate_in_support_function(adjective_meaning_family *f
Produce::inv_primitive(Emit::tree(), NOT_BIP);
Produce::down(Emit::tree());
}
Specifications::Compiler::emit_as_val(K_number, spec);
CompileSpecifications::to_code_val(K_number, spec);
if (def->format == -1) {
Produce::up(Emit::tree());
}

View file

@ -61,13 +61,13 @@ void RTActivities::emit_activity_list(activity_list *al) {
Calculus::Deferrals::compile_deferred_description_test(al->acting_on));
} else {
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
Specifications::Compiler::emit_as_val(K_value, al->acting_on);
CompileSpecifications::to_code_val(K_value, al->acting_on);
}
}
Produce::up(Emit::tree());
}
else {
Specifications::Compiler::emit_as_val(K_value, al->only_when);
CompileSpecifications::to_code_val(K_value, al->only_when);
}
al = al->next;
}

View file

@ -662,7 +662,7 @@ a file stream, thus allowing rewinding:
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, new_s);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
}
} else {

View file

@ -67,7 +67,7 @@ the list!);
Emit::array_numeric_entry((inter_ti) n);
for (lle = ll->first_llist_entry; lle; lle = lle->next_llist_entry)
Specifications::Compiler::emit_constant_to_kind(
CompileSpecifications::to_array_entry_promoting(
lle->llist_entry_value, ll->entry_kind);
Emit::array_end(save);

View file

@ -140,7 +140,7 @@ void InternalTests::InternalTestCases_routine(void) {
Produce::inv_primitive(Emit::tree(), INDIRECT1V_BIP);
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, Kinds::Behaviour::get_iname(K));
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
Str::clear(OUT);
@ -280,7 +280,7 @@ void InternalTests::emit_showme(parse_node *spec) {
if (Kinds::get_construct(K) == CON_list_of) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(LIST_OF_TY_SAY_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
Produce::up(Emit::tree());
} else {
@ -288,7 +288,7 @@ void InternalTests::emit_showme(parse_node *spec) {
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Produce::inv_call_iname(Emit::tree(), Kinds::Behaviour::get_iname(K));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
END_COMPILATION_MODE;
}

View file

@ -321,13 +321,7 @@ int RTProperties::uses_non_typesafe_0(property *prn) {
void RTProperties::compile_vp_value(value_holster *VH, property *prn, parse_node *val) {
kind *K = ValueProperties::kind(prn);
if (K) Specifications::Compiler::compile_constant_to_kind_vh(VH, val, K);
else {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Specifications::Compiler::compile_inner(VH, val);
END_COMPILATION_MODE;
}
CompileSpecifications::holster_constant(VH, val, K);
}
void RTProperties::compile_vp_default_value(value_holster *VH, property *prn) {

View file

@ -1774,7 +1774,7 @@ void RTRelations::compile_routine_to_decide(inter_name *rname,
} else {
Produce::inv_primitive(Emit::tree(), RETURN_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
}
@ -1884,8 +1884,8 @@ void RTRelations::emit_one(inference_subject_family *f, inference_subject *infs)
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, RTRelations::iname(bp));
Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(RELS_ASSERT_TRUE_HL));
Specifications::Compiler::emit_as_val(K_value, spec0);
Specifications::Compiler::emit_as_val(K_value, spec1);
CompileSpecifications::to_code_val(K_value, spec0);
CompileSpecifications::to_code_val(K_value, spec1);
Produce::up(Emit::tree());
}
Functions::end(save);

View file

@ -495,9 +495,7 @@ void Strings::compile_general(value_holster *VH, parse_node *str) {
}
} else {
if (Wordings::empty(SW)) internal_error("Text no longer available for CONSTANT/TEXT");
if (TEST_COMPILATION_MODE(COMPILE_TEXT_TO_QUOT_CMODE)) {
TextLiterals::compile_quotation(VH, SW);
} else @<This is going to make a valid I7 text value@>;
@<This is going to make a valid I7 text value@>;
}
}

View file

@ -169,7 +169,7 @@ int RTRules::compile_constraint(rule *R) {
if (<s-condition>(acl->text_of_condition)) {
parse_node *spec = <<rp>>;
Dash::check_condition(spec);
Specifications::Compiler::emit_as_val(K_truth_state, spec);
CompileSpecifications::to_code_val(K_truth_state, spec);
} else {
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, acl->text_of_condition);
@ -492,7 +492,7 @@ than once for each rule.
switch (format) {
case ARRAY_RBF:
case GROUPED_ARRAY_RBF:
Specifications::Compiler::emit(spec);
CompileSpecifications::to_array_entry(spec);
break;
case ROUTINE_RBF:
if (entry_count > 0) {
@ -525,7 +525,7 @@ than once for each rule.
Produce::ref_symbol(Emit::tree(), K_value, rv_s);
Produce::inv_primitive(Emit::tree(), INDIRECT0_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@ -552,7 +552,7 @@ than once for each rule.
Produce::inv_primitive(Emit::tree(), RETURN_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
Produce::up(Emit::tree());

View file

@ -87,7 +87,7 @@ int RTKinds::emit_default_value(kind *K, wording W, char *storage_name) {
int RTKinds::emit_default_value_as_val(kind *K, wording W, char *storage_name) {
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
int rv = RTKinds::compile_default_value_vh(&VH, K, W, storage_name);
Holsters::to_val_mode(Emit::tree(), &VH);
Holsters::unholster_to_code_val(Emit::tree(), &VH);
return rv;
}
int RTKinds::compile_default_value_vh(value_holster *VH, kind *K,

View file

@ -232,7 +232,7 @@ used to define new kinds; in this case it doesn't matter what we write, but
parse_node *val = Node::get_evaluation(cell);
if (Specifications::is_kind_like(val)) Emit::array_numeric_entry(0);
else if (val == NULL) internal_error("Valueless cell");
else Specifications::Compiler::emit_constant_to_kind(val, K);
else CompileSpecifications::to_array_entry_promoting(val, K);
#ifdef IF_MODULE
}
#endif

View file

@ -410,7 +410,7 @@ void RTVariables::emit_initial_value(nonlocal_variable *nlv) {
void RTVariables::emit_initial_value_as_val(nonlocal_variable *nlv) {
value_holster VH = Holsters::new(INTER_VAL_VHMODE);
RTVariables::compile_initial_value_vh(&VH, nlv);
Holsters::to_val_mode(Emit::tree(), &VH);
Holsters::unholster_to_code_val(Emit::tree(), &VH);
}
void RTVariables::seek_initial_value(inter_name *iname, inter_ti *v1,
@ -432,7 +432,7 @@ void RTVariables::compile_initial_value_vh(value_holster *VH, nonlocal_variable
current_sentence = VariableSubjects::origin_of_initial_value(nlv);
if (Lvalues::get_storage_form(val) == NONLOCAL_VARIABLE_NT)
@<Issue a problem for one variable set equal to another@>
else Specifications::Compiler::compile_constant_to_kind_vh(VH, val, nlv->nlv_kind);
else CompileSpecifications::holster_constant(VH, val, nlv->nlv_kind);
}
}

View file

@ -62,7 +62,7 @@ void RTActionPatterns::emit_try_action_parameter(parse_node *spec, kind *require
if (Dash::check_value(spec, required_kind)) {
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Specifications::Compiler::emit_as_val(K_object, spec);
CompileSpecifications::to_code_val(K_object, spec);
END_COMPILATION_MODE;
}
}
@ -143,7 +143,7 @@ void RTActionPatterns::compile_pattern_match_clause_inner(value_holster *VH,
Produce::down(Emit::tree());
inter_symbol *lvar_s = LocalVariables::declare(lvar);
Produce::ref_symbol(Emit::tree(), K_value, lvar_s);
Specifications::Compiler::emit_as_val(K_value, I6_var_TS);
CompileSpecifications::to_code_val(K_value, I6_var_TS);
Produce::up(Emit::tree());
}
@ -171,10 +171,10 @@ void RTActionPatterns::compile_pattern_match_clause_inner(value_holster *VH,
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, ct_0_s);
Specifications::Compiler::emit_as_val(K_value, spec->down->next);
CompileSpecifications::to_code_val(K_value, spec->down->next);
Produce::up(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec->down);
Specifications::Compiler::emit_as_val(K_value, I6_var_TS);
CompileSpecifications::to_code_val(K_value, spec->down);
CompileSpecifications::to_code_val(K_value, I6_var_TS);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
force_proposition = FALSE;
@ -194,7 +194,7 @@ void RTActionPatterns::compile_pattern_match_clause_inner(value_holster *VH,
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT2_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, spec);
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(CONSULT_FROM_HL));
Produce::val_iname(Emit::tree(), K_number, Hierarchy::find(CONSULT_WORDS_HL));
Produce::up(Emit::tree());
@ -212,8 +212,8 @@ void RTActionPatterns::compile_pattern_match_clause_inner(value_holster *VH,
if (adapt_region) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(TESTREGIONALCONTAINMENT_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, I6_var_TS);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, I6_var_TS);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
force_proposition = FALSE;
}
@ -227,8 +227,8 @@ void RTActionPatterns::compile_pattern_match_clause_inner(value_holster *VH,
(Instances::of_kind(Descriptions::to_instance(spec), K_region)))) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(TESTREGIONALCONTAINMENT_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, I6_var_TS);
Specifications::Compiler::emit_as_val(K_value, spec);
CompileSpecifications::to_code_val(K_value, I6_var_TS);
CompileSpecifications::to_code_val(K_value, spec);
Produce::up(Emit::tree());
}
force_proposition = FALSE;
@ -283,7 +283,7 @@ void RTActionPatterns::as_stored_action(value_holster *VH, explicit_action *ea)
literal_text *lt = TextLiterals::compile_literal(NULL, FALSE, Node::get_text(ea->first_noun));
Emit::array_iname_entry(lt->lt_sba_iname);
DISCARD_TEXT(BC)
} else Specifications::Compiler::emit(ea->first_noun);
} else CompileSpecifications::to_array_entry(ea->first_noun);
} else {
Emit::array_numeric_entry(0);
}
@ -292,12 +292,12 @@ void RTActionPatterns::as_stored_action(value_holster *VH, explicit_action *ea)
request_bits = request_bits | 32;
literal_text *lt = TextLiterals::compile_literal(NULL, TRUE, Node::get_text(ea->second_noun));
Emit::array_iname_entry(lt->lt_sba_iname);
} else Specifications::Compiler::emit(ea->second_noun);
} else CompileSpecifications::to_array_entry(ea->second_noun);
} else {
Emit::array_numeric_entry(0);
}
if (ea->actor) {
Specifications::Compiler::emit(ea->actor);
CompileSpecifications::to_array_entry(ea->actor);
} else
Emit::array_iname_entry(RTInstances::iname(I_yourself));
Emit::array_numeric_entry((inter_ti) request_bits);
@ -781,7 +781,7 @@ void RTActionPatterns::compile_pattern_match(value_holster *VH, action_pattern *
Produce::up(Emit::tree());
break;
case WHEN_CONDITION_HOLDS_CPMC:
Specifications::Compiler::emit_as_val(K_value, APClauses::spec(ap, WHEN_AP_CLAUSE));
CompileSpecifications::to_code_val(K_value, APClauses::spec(ap, WHEN_AP_CLAUSE));
break;
}
@ -793,7 +793,7 @@ void RTActionPatterns::emit_past_tense(action_pattern *ap) {
if (APClauses::spec(ap, NOUN_AP_CLAUSE) == NULL)
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
else
Specifications::Compiler::emit_as_val(K_value, APClauses::spec(ap, NOUN_AP_CLAUSE));
CompileSpecifications::to_code_val(K_value, APClauses::spec(ap, NOUN_AP_CLAUSE));
int L = ActionNameLists::length(ap->action_list);
if (L == 0)
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) -1);

View file

@ -10,16 +10,11 @@ constants.
=
void RTBibliographicData::compile_constants(void) {
encode_constant_text_bibliographically = TRUE;
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_ENTER(COMPILE_TEXT_TO_I6_CMODE);
if (story_title_VAR) @<Compile the I6 Story constant@>;
if (story_headline_VAR) @<Compile the I6 Headline constant@>;
if (story_author_VAR) @<Compile the I6 Story Author constant@>;
if (story_release_number_VAR) @<Compile the I6 Release directive@>;
@<Compile the I6 serial number, based on the date@>;
END_COMPILATION_MODE;
encode_constant_text_bibliographically = FALSE;
}

View file

@ -128,7 +128,7 @@ void RTCommandGrammarLines::MistakeActionSub_routine(void) {
Produce::down(Emit::tree());
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(PARSERERROR_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_constant_to_kind_as_val(spec, K_text);
CompileSpecifications::to_code_val_promoting(spec, K_text);
Produce::up(Emit::tree());
Produce::up(Emit::tree());
Produce::up(Emit::tree());
@ -181,7 +181,7 @@ void RTCommandGrammarLines::cgl_compile_condition_token_as_needed(cg_line *cgl)
Produce::inv_primitive(Emit::tree(), AND_BIP);
Produce::down(Emit::tree());
}
if (spec) Specifications::Compiler::emit_as_val(K_truth_state, spec);
if (spec) CompileSpecifications::to_code_val(K_truth_state, spec);
if (prop) Calculus::Deferrals::emit_test_of_proposition(Rvalues::new_self_object_constant(), prop);
if ((spec) && (prop)) {
Produce::up(Emit::tree());

View file

@ -369,5 +369,5 @@ void RTCommandGrammars::compile_iv(gpr_kit *gprk, command_grammar *cg) {
}
void RTCommandGrammars::emit_determination_type(determination_type *gty) {
Specifications::Compiler::emit_as_val(K_value, gty->term[0].what);
CompileSpecifications::to_code_val(K_value, gty->term[0].what);
}

View file

@ -808,7 +808,7 @@ void UnderstandGeneralTokens::test_distinguish_visible_property(gpr_kit *gprk, p
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
Specifications::Compiler::emit_as_val(K_truth_state, spec);
CompileSpecifications::to_code_val(K_truth_state, spec);
Produce::up(Emit::tree());
Produce::inv_primitive(Emit::tree(), STORE_BIP);
@ -819,7 +819,7 @@ void UnderstandGeneralTokens::test_distinguish_visible_property(gpr_kit *gprk, p
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_symbol(Emit::tree(), K_value, gprk->g_s);
Specifications::Compiler::emit_as_val(K_truth_state, spec);
CompileSpecifications::to_code_val(K_truth_state, spec);
Produce::up(Emit::tree());
Produce::inv_primitive(Emit::tree(), IF_BIP);
@ -976,7 +976,7 @@ void UnderstandGeneralTokens::begin_parsing_visible_properties(gpr_kit *gprk) {
void UnderstandGeneralTokens::test_parse_visible_property(gpr_kit *gprk, parse_node *spec) {
Produce::inv_primitive(Emit::tree(), IF_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_truth_state, spec);
CompileSpecifications::to_code_val(K_truth_state, spec);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
}

View file

@ -209,7 +209,7 @@ instruction because we're not compiling a loop.)
Produce::inv_primitive(Emit::tree(), IF_BIP);
Produce::down(Emit::tree());
current_sentence = sc->ends[end].anchor_condition_set;
Specifications::Compiler::emit_as_val(K_truth_state, S);
CompileSpecifications::to_code_val(K_truth_state, S);
Produce::code(Emit::tree());
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), STORE_BIP);
@ -623,7 +623,7 @@ void RTScenes::emit_during_clause(parse_node *spec) {
if (desc) {
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DURINGSCENEMATCHING_HL));
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, desc);
CompileSpecifications::to_code_val(K_value, desc);
Produce::up(Emit::tree());
stuck = FALSE;
}

View file

@ -231,7 +231,7 @@ void Conditions::compile(value_holster *VH, parse_node *spec_found) {
/* purely for problem recovery: */
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
} else {
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down);
}
break;
case TEST_PHRASE_OPTION_NT: @<Compile a phrase option test@>; break;
@ -245,7 +245,7 @@ void Conditions::compile(value_holster *VH, parse_node *spec_found) {
internal_error("Compiled malformed LOGICAL_NOT_NT");
Produce::inv_primitive(Emit::tree(), NOT_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down);
Produce::up(Emit::tree());
@ An easy case, running straight out to I6 operators:
@ -261,8 +261,8 @@ void Conditions::compile(value_holster *VH, parse_node *spec_found) {
if (Node::is(spec_found, LOGICAL_AND_NT)) Produce::inv_primitive(Emit::tree(), AND_BIP);
if (Node::is(spec_found, LOGICAL_OR_NT)) Produce::inv_primitive(Emit::tree(), OR_BIP);
Produce::down(Emit::tree());
Specifications::Compiler::emit_as_val(K_value, left_operand);
Specifications::Compiler::emit_as_val(K_value, right_operand);
CompileSpecifications::to_code_val(K_value, left_operand);
CompileSpecifications::to_code_val(K_value, right_operand);
Produce::up(Emit::tree());
@ Phrase options are stored as bits in a 16-bit map, so that each individual

View file

@ -302,7 +302,7 @@ void Lvalues::compile(value_holster *VH, parse_node *spec_found) {
}
RTKinds::emit_weak_id_as_val(owner_kind);
@<Emit the property's owner@>;
Specifications::Compiler::emit_as_val(K_value, prop_spec);
CompileSpecifications::to_code_val(K_value, prop_spec);
if (!(TEST_COMPILATION_MODE(TREAT_AS_LVALUE_CMODE))) {
Produce::up(Emit::tree());
}
@ -347,10 +347,10 @@ object as produced the original text containing the substitution.
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());
Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(SELF_HL));
Specifications::Compiler::emit_as_val(K_value, owner);
CompileSpecifications::to_code_val(K_value, owner);
Produce::up(Emit::tree());
} else {
Specifications::Compiler::emit_as_val(K_value, owner);
CompileSpecifications::to_code_val(K_value, owner);
}
@ List entries are blessedly simpler.
@ -369,9 +369,9 @@ object as produced the original text containing the substitution.
}
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down);
END_COMPILATION_MODE;
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next);
CompileSpecifications::to_code_val(K_value, spec_found->down->next);
if (!(TEST_COMPILATION_MODE(TREAT_AS_LVALUE_CMODE))) {
Produce::up(Emit::tree());
}
@ -381,9 +381,15 @@ object as produced the original text containing the substitution.
@ Table entries are simple too, but come in four variant forms:
@<Compile a table entry specification@> =
Lvalues::compile_table_reference(VH, spec_found, FALSE, FALSE);
return;
@ =
void Lvalues::compile_table_reference(value_holster *VH, parse_node *spec_found,
int exists, int blank_out) {
inter_name *lookup = Hierarchy::find(TABLELOOKUPENTRY_HL);
inter_name *lookup_corr = Hierarchy::find(TABLELOOKUPCORR_HL);
if (TEST_COMPILATION_MODE(TABLE_EXISTENCE_CMODE)) {
if (exists) {
lookup = Hierarchy::find(EXISTSTABLELOOKUPENTRY_HL);
lookup_corr = Hierarchy::find(EXISTSTABLELOOKUPCORR_HL);
}
@ -404,9 +410,9 @@ object as produced the original text containing the substitution.
local_variable *ct_1_lv = LocalVariables::find_internal(I"ct_1");
inter_symbol *ct_1_s = LocalVariables::declare(ct_1_lv);
Produce::val_symbol(Emit::tree(), K_value, ct_0_s);
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down);
Produce::val_symbol(Emit::tree(), K_value, ct_1_s);
if (TEST_COMPILATION_MODE(BLANK_OUT_CMODE)) {
if (blank_out) {
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 4);
}
if (!(TEST_COMPILATION_MODE(TREAT_AS_LVALUE_CMODE))) {
@ -425,10 +431,10 @@ object as produced the original text containing the substitution.
Produce::inv_call_iname(Emit::tree(), lookup);
Produce::down(Emit::tree());
}
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next->next);
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next);
if (TEST_COMPILATION_MODE(BLANK_OUT_CMODE)) {
CompileSpecifications::to_code_val(K_value, spec_found->down->next->next);
CompileSpecifications::to_code_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down->next);
if (blank_out) {
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 4);
}
if (!(TEST_COMPILATION_MODE(TREAT_AS_LVALUE_CMODE))) {
@ -444,11 +450,11 @@ object as produced the original text containing the substitution.
Produce::inv_call_iname(Emit::tree(), lookup_corr);
Produce::down(Emit::tree());
}
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next->next->next);
Specifications::Compiler::emit_as_val(K_value, spec_found->down);
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next);
Specifications::Compiler::emit_as_val(K_value, spec_found->down->next->next);
if (TEST_COMPILATION_MODE(BLANK_OUT_CMODE)) {
CompileSpecifications::to_code_val(K_value, spec_found->down->next->next->next);
CompileSpecifications::to_code_val(K_value, spec_found->down);
CompileSpecifications::to_code_val(K_value, spec_found->down->next);
CompileSpecifications::to_code_val(K_value, spec_found->down->next->next);
if (blank_out) {
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 4);
}
if (!(TEST_COMPILATION_MODE(TREAT_AS_LVALUE_CMODE))) {
@ -458,7 +464,7 @@ object as produced the original text containing the substitution.
break;
default: internal_error("TABLE REFERENCE with bad number of args");
}
return;
}
@h Lvalue compilation.
To recap, if an assignment takes the form "now X is Y" then X is the lvalue,

View file

@ -647,7 +647,7 @@ kinds of value:
Produce::inv_primitive(Emit::tree(), SEQUENTIAL_BIP);
Produce::down(Emit::tree()); downs++;
}
Specifications::Compiler::emit_as_val(K_value, term);
CompileSpecifications::to_code_val(K_value, term);
}
while (downs > 0) { Produce::up(Emit::tree()); downs--; }
return;

View file

@ -34,7 +34,7 @@ misses out.
@<Parse a decimal expansion@>;
if (intcount + fraccount > 0) {
if ((Wordings::length(W) > 1) || (p[i])) @<Parse an exponent@>;
if ((distinctive) || (TEST_COMPILATION_MODE(CONSTANT_CMODE))) {
if ((distinctive) || (LiteralReals::promote())) {
==> { LiteralReals::construct_float(signbit, intv, fracv, expo), - };
return TRUE;
}
@ -223,3 +223,27 @@ void LiteralReals::wrong_notation(wording W) {
Problems::issue_problem_end();
}
}
@ This upgrades a literal |K_number| to a literal |K_real_number| if necessary,
as it can be when performing arithmetic. Note that we do this not by running
an integer-to-real conversion inside Inform, but just by re-parsing it in a
real context: the result is therefore identical to what would have been parsed
had the literal in question been expected to be real all along.
=
int promoting_reals = FALSE;
int LiteralReals::promote(void) {
return promoting_reals;
}
parse_node *LiteralReals::promote_number_if_necessary(parse_node *value, kind *to) {
int s = promoting_reals;
promoting_reals = TRUE;
kind *from = Specifications::to_kind(value);
if ((Kinds::eq(from, K_number)) && (Kinds::eq(to, K_real_number))) {
wording W = Node::get_text(value);
if (<s-literal-real-number>(W)) value = <<rp>>;
else internal_error("can't parse integer as real");
}
promoting_reals = s;
return value;
}

View file

@ -36,7 +36,7 @@ int Holsters::data_acceptable(value_holster *vh) {
return FALSE;
}
void Holsters::to_val_mode(inter_tree *I, value_holster *vh) {
void Holsters::unholster_to_code_val(inter_tree *I, value_holster *vh) {
if (vh == NULL) internal_error("no VH");
switch (vh->vhmode_provided) {
case INTER_DATA_VHMODE:

View file

@ -219,7 +219,7 @@ void Terms::emit(pcalc_term pt) {
} else {
if (Specifications::is_phrasal(pt.constant))
Dash::check_value(pt.constant, NULL);
Specifications::Compiler::emit_as_val(K_value, pt.constant);
CompileSpecifications::to_code_val(K_value, pt.constant);
}
return;
}