1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-12 22:18:57 +03:00

More on schema error reporting

This commit is contained in:
Graham Nelson 2023-04-26 23:11:43 +01:00
parent 8d92831249
commit 8aa902ce50
51 changed files with 2885 additions and 2563 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6W37 'Krypton' (25 April 2023)
[Version](notes/versioning.md): 10.2.0-beta+6W38 'Krypton' (26 April 2023)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 25 April 2023
Build Number: 6W37
Build Date: 26 April 2023
Build Number: 6W38

View file

@ -77,6 +77,7 @@ few hundred — so they do not need to be stored compactly or compiled quick
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mid_case</span><span class="plain-syntax">; </span><span class="comment-syntax"> does this seem to be used inside a switch case?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dereference_mode</span><span class="plain-syntax">; </span><span class="comment-syntax"> emit from this in dereference-pointers mode</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">parsing_errors</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">schema_parsing_error</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax">;</span>
</pre>
@ -84,13 +85,14 @@ few hundred &mdash; so they do not need to be stored compactly or compiled quick
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::new</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::new</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">source</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">converted_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">source</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</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">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mid_case</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">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dereference_mode</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">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</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">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">provenance</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">sch</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -132,6 +134,7 @@ we now more efficiently remove them.)
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">blocked_by_conditional</span><span class="plain-syntax">; </span><span class="comment-syntax"> used in code generation</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">; </span><span class="comment-syntax"> used for error reporting</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax">;</span>
</pre>
@ -139,7 +142,8 @@ we now more efficiently remove them.)
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new_node</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">InterSchemas::new_node</span></span>:<br/><a href="2-is.html#SP6">&#167;6</a>, <a href="2-is.html#SP14">&#167;14</a><br/>Ramification - <a href="2-rmf.html#SP4">&#167;4</a>, <a href="2-rmf.html#SP5">&#167;5</a>, <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP8">&#167;8</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP12">&#167;12</a>, <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_3">&#167;13.3</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a>, <a href="2-rmf.html#SP13_4_3">&#167;13.4.3</a>, <a href="2-rmf.html#SP14">&#167;14</a>, <a href="2-rmf.html#SP15">&#167;15</a>, <a href="2-rmf.html#SP17_1">&#167;17.1</a>, <a href="2-rmf.html#SP18">&#167;18</a>, <a href="2-rmf.html#SP19">&#167;19</a>, <a href="2-rmf.html#SP22_3">&#167;22.3</a>, <a href="2-rmf.html#SP22_4">&#167;22.4</a>, <a href="2-rmf.html#SP23_1_1_1">&#167;23.1.1.1</a>, <a href="2-rmf.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">isnt</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new_node</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">InterSchemas::new_node</span></span>:<br/><a href="2-is.html#SP6">&#167;6</a>, <a href="2-is.html#SP14">&#167;14</a><br/>Ramification - <a href="2-rmf.html#SP4">&#167;4</a>, <a href="2-rmf.html#SP5">&#167;5</a>, <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP8">&#167;8</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP12">&#167;12</a>, <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_3">&#167;13.3</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a>, <a href="2-rmf.html#SP13_4_3">&#167;13.4.3</a>, <a href="2-rmf.html#SP14">&#167;14</a>, <a href="2-rmf.html#SP17_1">&#167;17.1</a>, <a href="2-rmf.html#SP18">&#167;18</a>, <a href="2-rmf.html#SP22_3">&#167;22.3</a>, <a href="2-rmf.html#SP22_4">&#167;22.4</a>, <a href="2-rmf.html#SP23_1_1_1">&#167;23.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">isnt</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">near_here</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sch</span><span class="plain-syntax">;</span>
@ -159,6 +163,17 @@ we now more efficiently remove them.)
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unopened</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">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">blocked_by_conditional</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">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">sch</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">):(</span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">near_here</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::set_line</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">) + </span><span class="identifier-syntax">near_here</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</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">isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new_node_near_node</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::new_node_near_node</span></span>:<br/>Ramification - <a href="2-rmf.html#SP15">&#167;15</a>, <a href="2-rmf.html#SP19">&#167;19</a>, <a href="2-rmf.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">isnt</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">near_here</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="identifier-syntax">isnt</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">near_here</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">near_here</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</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">isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -194,7 +209,7 @@ upwards.
</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">InterSchemas::mark_unclosed</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">InterSchemas::mark_unclosed</span></span>:<br/>Ramification - <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::mark_unclosed</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">InterSchemas::mark_unclosed</span></span>:<br/>Ramification - <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</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">isn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unclosed</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">isn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
@ -207,7 +222,7 @@ at the top of the tree to serve that role.
</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">InterSchemas::mark_unopened</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">InterSchemas::mark_unopened</span></span>:<br/>Ramification - <a href="2-rmf.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::mark_unopened</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">InterSchemas::mark_unopened</span></span>:<br/>Ramification - <a href="2-rmf.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</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">isn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unopened</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -217,7 +232,7 @@ at the top of the tree to serve that role.
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">top</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</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">code_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">top</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_isn</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">top</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">)</span>
@ -243,7 +258,7 @@ associate this with any single node, so we mark the schema as a whole.
</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">InterSchemas::mark_case_closed</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">InterSchemas::mark_case_closed</span></span>:<br/>Ramification - <a href="2-rmf.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::mark_case_closed</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">InterSchemas::mark_case_closed</span></span>:<br/>Ramification - <a href="2-rmf.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">mid_case</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -313,7 +328,7 @@ compilation process, and never survive into the final schema:
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">preinsert</span><span class="plain-syntax">; </span><span class="comment-syntax"> fleeting markers only</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">postinsert</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">line_offset</span><span class="plain-syntax">; </span><span class="comment-syntax"> counting lines for error message use</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax">;</span>
</pre>
@ -321,8 +336,8 @@ compilation process, and never survive into the final schema:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new_token</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">InterSchemas::new_token</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_3">&#167;1.3</a>, <a href="2-tkn.html#SP1_6_1">&#167;1.6.1</a>, <a href="2-tkn.html#SP1_7_1">&#167;1.7.1</a>, <a href="2-tkn.html#SP1_8">&#167;1.8</a>, <a href="2-tkn.html#SP1_3_1_4">&#167;1.3.1.4</a><br/>Ramification - <a href="2-rmf.html#SP3">&#167;3</a>, <a href="2-rmf.html#SP13_1_7_1_1">&#167;13.1.7.1.1</a>, <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a>, <a href="2-rmf.html#SP13_4_2">&#167;13.4.2</a>, <a href="2-rmf.html#SP13_4_4">&#167;13.4.4</a>, <a href="2-rmf.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">material</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">operation_primitive</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reserved_word</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::new_token</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">InterSchemas::new_token</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_3">&#167;1.3</a>, <a href="2-tkn.html#SP1_6_1">&#167;1.6.1</a>, <a href="2-tkn.html#SP1_7_1">&#167;1.7.1</a>, <a href="2-tkn.html#SP1_8">&#167;1.8</a>, <a href="2-tkn.html#SP1_3_1_4">&#167;1.3.1.4</a><br/>Ramification - <a href="2-rmf.html#SP3">&#167;3</a>, <a href="2-rmf.html#SP13_1_7_1_1">&#167;13.1.7.1.1</a>, <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a>, <a href="2-rmf.html#SP13_4_2">&#167;13.4.2</a>, <a href="2-rmf.html#SP13_4_4">&#167;13.4.4</a>, <a href="2-rmf.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">material</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">operation_primitive</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reserved_word</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">offset</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> = </span><span class="identifier-syntax">type</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">material</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
@ -344,6 +359,7 @@ compilation process, and never survive into the final schema:
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preinsert</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">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">postinsert</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">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</span><span class="plain-syntax"> = </span><span class="identifier-syntax">offset</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">t</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -459,13 +475,13 @@ compilation process, and never survive into the final schema:
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Token insertion. </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">InterSchemas::add_token</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">InterSchemas::add_token</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_3">&#167;1.3</a>, <a href="2-tkn.html#SP1_6_1">&#167;1.6.1</a>, <a href="2-tkn.html#SP1_7_1">&#167;1.7.1</a>, <a href="2-tkn.html#SP1_8">&#167;1.8</a>, <a href="2-tkn.html#SP1_3_1_4">&#167;1.3.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::add_token</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">InterSchemas::add_token</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_3">&#167;1.3</a>, <a href="2-tkn.html#SP1_6_1">&#167;1.6.1</a>, <a href="2-tkn.html#SP1_7_1">&#167;1.7.1</a>, <a href="2-tkn.html#SP1_8">&#167;1.8</a>, <a href="2-tkn.html#SP1_3_1_4">&#167;1.3.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</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">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_to_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::add_token_to_node</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">InterSchemas::add_token_to_node</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::add_token_to_node</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">InterSchemas::add_token_to_node</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_7_2">&#167;13.1.7.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">;</span>
@ -475,7 +491,7 @@ compilation process, and never survive into the final schema:
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</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">InterSchemas::add_token_after</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">InterSchemas::add_token_after</span></span>:<br/>Ramification - <a href="2-rmf.html#SP3">&#167;3</a>, <a href="2-rmf.html#SP13_1_7_1_1">&#167;13.1.7.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::add_token_after</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::add_token_after</span></span>:<br/>Ramification - <a href="2-rmf.html#SP3">&#167;3</a>, <a href="2-rmf.html#SP13_1_7_1_1">&#167;13.1.7.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">existing</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">"can't add after null element"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">was</span><span class="plain-syntax"> = </span><span class="identifier-syntax">existing</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">existing</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
@ -487,7 +503,7 @@ compilation process, and never survive into the final schema:
</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">InterSchemas::changed_tokens_on</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::changed_tokens_on</span></span>:<br/>Ramification - <a href="2-rmf.html#SP4">&#167;4</a>, <a href="2-rmf.html#SP5">&#167;5</a>, <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP8">&#167;8</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP12">&#167;12</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a>, <a href="2-rmf.html#SP13_4_3">&#167;13.4.3</a>, <a href="2-rmf.html#SP13_4_4">&#167;13.4.4</a>, <a href="2-rmf.html#SP17_1">&#167;17.1</a>, <a href="2-rmf.html#SP18">&#167;18</a>, <a href="2-rmf.html#SP22_3">&#167;22.3</a>, <a href="2-rmf.html#SP22_4">&#167;22.4</a>, <a href="2-rmf.html#SP23_1_1_1">&#167;23.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::changed_tokens_on</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::changed_tokens_on</span></span>:<br/>Ramification - <a href="2-rmf.html#SP4">&#167;4</a>, <a href="2-rmf.html#SP5">&#167;5</a>, <a href="2-rmf.html#SP7">&#167;7</a>, <a href="2-rmf.html#SP8">&#167;8</a>, <a href="2-rmf.html#SP10">&#167;10</a>, <a href="2-rmf.html#SP12">&#167;12</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a>, <a href="2-rmf.html#SP13_4_3">&#167;13.4.3</a>, <a href="2-rmf.html#SP13_4_4">&#167;13.4.4</a>, <a href="2-rmf.html#SP17_1">&#167;17.1</a>, <a href="2-rmf.html#SP18">&#167;18</a>, <a href="2-rmf.html#SP22_3">&#167;22.3</a>, <a href="2-rmf.html#SP22_4">&#167;22.4</a>, <a href="2-rmf.html#SP23_1_1_1">&#167;23.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</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">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">=</span><span class="identifier-syntax">l</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">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>
@ -497,33 +513,33 @@ compilation process, and never survive into the final schema:
</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">InterSchemas::opening_reserved_word</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::opening_reserved_word</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1">&#167;13.1</a>, <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::opening_reserved_word</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::opening_reserved_word</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1">&#167;13.1</a>, <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::first_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">f</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">f</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">RESERVED_ISTT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reserved_word</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::opening_directive_word</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::opening_directive_word</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::opening_directive_word</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">InterSchemas::opening_directive_word</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::first_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">f</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">f</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">DIRECTIVE_ISTT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reserved_word</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::first_dark_token</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">InterSchemas::first_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13">&#167;13</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_3">&#167;13.3</a>, <a href="2-rmf.html#SP17">&#167;17</a>, <a href="2-rmf.html#SP22">&#167;22</a>, <a href="2-rmf.html#SP22_1">&#167;22.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::first_dark_token</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">InterSchemas::first_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13">&#167;13</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_3">&#167;13.3</a>, <a href="2-rmf.html#SP17">&#167;17</a>, <a href="2-rmf.html#SP22">&#167;22</a>, <a href="2-rmf.html#SP22_1">&#167;22.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span 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</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</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">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::next_dark_token</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">InterSchemas::next_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_3">&#167;13.1.3</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a>, <a href="2-rmf.html#SP13_1_8">&#167;13.1.8</a>, <a href="2-rmf.html#SP17">&#167;17</a>, <a href="2-rmf.html#SP22">&#167;22</a>, <a href="2-rmf.html#SP22_1">&#167;22.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::next_dark_token</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::next_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_3">&#167;13.1.3</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a>, <a href="2-rmf.html#SP13_1_8">&#167;13.1.8</a>, <a href="2-rmf.html#SP17">&#167;17</a>, <a href="2-rmf.html#SP22">&#167;22</a>, <a href="2-rmf.html#SP22_1">&#167;22.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</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">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::second_dark_token</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::second_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_2">&#167;13.1.2</a>, <a href="2-rmf.html#SP13_1_3">&#167;13.1.3</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP13_1_6">&#167;13.1.6</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a>, <a href="2-rmf.html#SP13_1_8">&#167;13.1.8</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSchemas::second_dark_token</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">InterSchemas::second_dark_token</span></span>:<br/>Ramification - <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_2">&#167;13.1.2</a>, <a href="2-rmf.html#SP13_1_3">&#167;13.1.3</a>, <a href="2-rmf.html#SP13_1_4">&#167;13.1.4</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP13_1_6">&#167;13.1.6</a>, <a href="2-rmf.html#SP13_1_7">&#167;13.1.7</a>, <a href="2-rmf.html#SP13_1_8">&#167;13.1.8</a>, <a href="2-rmf.html#SP13_2">&#167;13.2</a>, <a href="2-rmf.html#SP13_4_1">&#167;13.4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node</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-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::next_dark_token</span></a><span class="plain-syntax">(</span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::first_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
@ -532,7 +548,7 @@ we go to some trouble here.
</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">InterSchemas::log</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">InterSchemas::log</span></span>:<br/>Building Module - <a href="1-bm.html#SP3_3">&#167;3.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vis</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::log</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::log</span></span>:<br/>Building Module - <a href="1-bm.html#SP3_3">&#167;3.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vis</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vis</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null schema&gt;\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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;schema without nodes&gt;\n"</span><span class="plain-syntax">);</span>
@ -543,7 +559,12 @@ we go to some trouble here.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">isn</span><span class="plain-syntax">; </span><span class="identifier-syntax">isn</span><span class="plain-syntax">=</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP17" class="function-link"><span class="function-syntax">InterSchemas::log_just</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</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">InterSchemas::log_just</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::log_just</span></span>:<br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::log_just</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::log_just</span></span>:<br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%04d "</span><span class="plain-syntax">, </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">".... "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">blocked_by_conditional</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"XX"</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">d</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">depth</span><span class="plain-syntax">; </span><span class="identifier-syntax">d</span><span class="plain-syntax">++) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</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">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_type</span><span class="plain-syntax">) {</span>
@ -659,7 +680,7 @@ where the check is done:
</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">InterSchemas::lint</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::lint</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::lint</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::lint</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">sch</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><a href="2-is.html#SP18" class="function-link"><span class="function-syntax">InterSchemas::lint_isn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">err</span><span class="plain-syntax">) {</span>
@ -727,6 +748,7 @@ which, of course, it usually isn't.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">;</span>
</pre>
@ -734,11 +756,18 @@ which, of course, it usually isn't.
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </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">InterSchemas::throw_error</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::throw_error</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_8">&#167;1.8</a><br/>Ramification - <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_2">&#167;13.1.2</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP14">&#167;14</a>, <a href="2-rmf.html#SP14_1">&#167;14.1</a>, <a href="2-rmf.html#SP15">&#167;15</a>, <a href="2-rmf.html#SP22_5">&#167;22.5</a>, <a href="2-rmf.html#SP26">&#167;26</a><br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1_1">&#167;2.1.1</a>, <a href="2-eis.html#SP2_1_2">&#167;2.1.2</a>, <a href="2-eis.html#SP3_1_1">&#167;3.1.1</a>, <a href="2-eis.html#SP3_1_2_1">&#167;3.1.2.1</a>, <a href="2-eis.html#SP3_1_3">&#167;3.1.3</a>, <a href="2-eis.html#SP3_1_4">&#167;3.1.4</a>, <a href="2-eis.html#SP3_1_5">&#167;3.1.5</a>, <a href="2-eis.html#SP3_1_6">&#167;3.1.6</a>, <a href="2-eis.html#SP3_1_7_2">&#167;3.1.7.2</a>, <a href="2-eis.html#SP3_1_8">&#167;3.1.8</a>, <a href="2-eis.html#SP3_1_11">&#167;3.1.11</a>, <a href="2-eis.html#SP3_1_11_1">&#167;3.1.11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::throw_error</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::throw_error</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_8">&#167;1.8</a><br/>Ramification - <a href="2-rmf.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-rmf.html#SP13_1_2">&#167;13.1.2</a>, <a href="2-rmf.html#SP13_1_5">&#167;13.1.5</a>, <a href="2-rmf.html#SP14">&#167;14</a>, <a href="2-rmf.html#SP14_1">&#167;14.1</a>, <a href="2-rmf.html#SP15">&#167;15</a>, <a href="2-rmf.html#SP22_5">&#167;22.5</a>, <a href="2-rmf.html#SP26">&#167;26</a><br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1_1">&#167;2.1.1</a>, <a href="2-eis.html#SP2_1_2">&#167;2.1.2</a>, <a href="2-eis.html#SP3_1_1">&#167;3.1.1</a>, <a href="2-eis.html#SP3_1_2_1">&#167;3.1.2.1</a>, <a href="2-eis.html#SP3_1_3">&#167;3.1.3</a>, <a href="2-eis.html#SP3_1_4">&#167;3.1.4</a>, <a href="2-eis.html#SP3_1_5">&#167;3.1.5</a>, <a href="2-eis.html#SP3_1_6">&#167;3.1.6</a>, <a href="2-eis.html#SP3_1_7_2">&#167;3.1.7.2</a>, <a href="2-eis.html#SP3_1_8">&#167;3.1.8</a>, <a href="2-eis.html#SP3_1_11">&#167;3.1.11</a>, <a href="2-eis.html#SP3_1_11_1">&#167;3.1.11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</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">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">message</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">)) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</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">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</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">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</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">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Schema error: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$1\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">);</span>
@ -748,7 +777,7 @@ which, of course, it usually isn't.
</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">InterSchemas::internal_error_on_schema_errors</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::internal_error_on_schema_errors</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSchemas::internal_error_on_schema_errors</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::internal_error_on_schema_errors</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::inter_schema_errors</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">);</span>

View file

@ -74,8 +74,8 @@ samples produce the correct schemas.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingSchemas::from_text</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">ParsingSchemas::from_text</span></span>:<br/><a href="2-pis.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-pis.html#SP5" class="function-link"><span class="function-syntax">ParsingSchemas::back_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingSchemas::from_text</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">ParsingSchemas::from_text</span></span>:<br/><a href="2-pis.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</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-pis.html#SP5" class="function-link"><span class="function-syntax">ParsingSchemas::back_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Abbreviated I6S notation. </b>This is a slicker notation used inside the <a href="../calculus-module/index.html" class="internal">calculus</a> module for purposes
@ -107,7 +107,7 @@ I6S code can only come from within the compiler itself, and means a bug.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">de</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::value_for_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">de</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP5" class="function-link"><span class="function-syntax">ParsingSchemas::back_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</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">no_quoted_inames</span><span class="plain-syntax">, </span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">no_quoted_inames</span><span class="plain-syntax">, </span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">, </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">i6s_inter_schema_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::write_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">i6s_inter_schema_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
@ -153,16 +153,16 @@ so it's the caller's responsibility to check for those and act accordingly.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingSchemas::from_inline_phrase_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> **</span><span class="identifier-syntax">head</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> **</span><span class="identifier-syntax">tail</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> **</span><span class="identifier-syntax">tail</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; *</span><span class="identifier-syntax">tail</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tail_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pis.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Fetch the head and tail definitions</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head_defn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head_defn</span><span class="plain-syntax">, </span><span class="identifier-syntax">provenance</span><span 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::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">tail_defn</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">tail</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tail_defn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">tail</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tail_defn</span><span class="plain-syntax">, </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>A tail will only be present if the definition contains <span class="extract"><span class="extract-syntax">{-block}</span></span>. If it
@ -231,8 +231,8 @@ such operations are nested, they will work. We might then write:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingSchemas::back_end</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">ParsingSchemas::back_end</span></span>:<br/><a href="2-pis.html#SP1">&#167;1</a>, <a href="2-pis.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">abbreviated</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_quoted_inames</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> **</span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><a href="2-is.html#SP2" class="function-link"><span class="function-syntax">InterSchemas::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_quoted_inames</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> **</span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><a href="2-is.html#SP2" class="function-link"><span class="function-syntax">InterSchemas::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DA</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Log::aspect_switched_on</span><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n\n------------\nCompiling inter schema from: &lt;%S&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>

View file

@ -196,14 +196,14 @@ and inserts them around the single statements in question.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preinsert</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preinsert</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">open_b</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPEN_BRACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"{"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPEN_BRACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"{"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">open_b</span><span class="plain-syntax">, </span><span class="identifier-syntax">prev</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">changed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">postinsert</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">postinsert</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">close_b</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CLOSE_BRACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"}"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CLOSE_BRACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"}"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">close_b</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">changed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -284,12 +284,12 @@ are removed.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">OPEN_BRACE_ISTT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</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">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</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">code_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_isn</span><span class="plain-syntax">;</span>
@ -319,7 +319,7 @@ are removed.
<span class="plain-syntax"> </span><span class="identifier-syntax">resumed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">resumed</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">resumed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</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">new_isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">resumed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">);</span>
@ -374,7 +374,7 @@ We want to represent them, however, by independent subtrees. So:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">CLOSE_ROUND_ISTT</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">DIVIDER_ISTT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">t</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</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">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</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">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">) {</span>
@ -482,7 +482,8 @@ of statements (or expressions), hierarchically arranged in code blocks.
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> = </span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">material</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-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">t</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</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">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</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">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">) {</span>
@ -544,7 +545,7 @@ early commands off from the subsequent matter. Thus:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">m</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">RESERVED_ISTT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">) {</span>
@ -643,12 +644,12 @@ We break this up as three code blocks:
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sw_val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sw_code</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">defaulter</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</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">sw_val</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_val</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_val</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_val</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">; </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sw_val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>
@ -683,7 +684,7 @@ We break this up as three code blocks:
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> = </span><span class="constant-syntax">CASE_BIP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sw_code_exp</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sw_code_exp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</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">sw_code</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sw_code_exp</span><span class="plain-syntax">;</span>
@ -802,7 +803,7 @@ our work simpler to take one of those meanings out of the picture.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reserved_word</span><span class="plain-syntax"> == </span><span class="constant-syntax">PRINT_I6RW</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">material</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"print"</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">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">material</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"print_ret"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">);</span>
@ -1136,13 +1137,13 @@ turned into function calls too, leaving:
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">printing_rule</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">open_b</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPEN_ROUND_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"("</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPEN_ROUND_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"("</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">printing_rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">open_b</span><span class="plain-syntax">, </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">open_b</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">open_b</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">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">)) </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</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">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">close_b</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CLOSE_ROUND_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">")"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CLOSE_ROUND_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">")"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">printing_rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">close_b</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">which_statement</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">operand1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -1160,17 +1161,17 @@ character, and one to return <span class="extract"><span class="extract-syntax">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">save_next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">STATEMENT_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">STATEMENT_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> = </span><span class="constant-syntax">PRINT_BIP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token_to_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</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="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</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="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">STATEMENT_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">STATEMENT_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> = </span><span class="constant-syntax">RETURN_BIP</span><span class="plain-syntax">;</span>
@ -1218,7 +1219,7 @@ to know about the difference.
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">dir_clarifier</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::opening_directive_word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</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-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::second_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cons</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::second_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">);</span>
@ -1251,7 +1252,7 @@ to be recognised for what they are.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">material</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">")"</span><span class="plain-syntax">))) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> != </span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">l</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_isn</span><span 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">-&gt;</span><span class="element-syntax">operation_primitive</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> = </span><span class="constant-syntax">IDENTIFIER_ISTT</span><span class="plain-syntax">;</span>
@ -1308,7 +1309,7 @@ assembly instructions <span class="extract"><span class="extract-syntax">@push</
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">operand1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">operand1</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::second_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">operand1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">first_child</span><span class="plain-syntax">);</span>
@ -1330,11 +1331,13 @@ they cannot both apply.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dangle_number</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">dangle_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">dangle_text</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">dangle_text</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">dangle_text</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -1348,7 +1351,7 @@ they cannot both apply.)
<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">operand2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_child</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which_statement</span><span class="plain-syntax"> == </span><span class="constant-syntax">IFELSE_BIP</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">second_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semicolon_terminated</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">second_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_child</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">;</span>
@ -1390,14 +1393,14 @@ But it is legal to do so in this schema, and that is what our expression node do
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</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">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPERATOR_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTYVALUE_BIP</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPERATOR_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"."</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTYVALUE_BIP</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</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="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</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><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPERATOR_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"="</span><span class="plain-syntax">, </span><span class="constant-syntax">STORE_BIP</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OPERATOR_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"="</span><span class="plain-syntax">, </span><span class="constant-syntax">STORE_BIP</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">dangle_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">expression_tokens</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">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-rmf.html#SP13_4">&#167;13.4</a>.</li></ul>
@ -1444,6 +1447,7 @@ removing the colon and bracket tokens. Thus:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">predicates</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">near</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">predicates</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</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">bl</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">cw</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">[3], *</span><span class="identifier-syntax">to</span><span class="plain-syntax">[3];</span>
@ -1471,7 +1475,8 @@ removing the colon and bracket tokens. Thus:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;3; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EVAL_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EVAL_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">near</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
@ -1480,7 +1485,8 @@ removing the colon and bracket tokens. Thus:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">expr_isn</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">expr_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">near</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">expr_isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">expr_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">eval_isn</span><span class="plain-syntax">;</span>
@ -1542,7 +1548,8 @@ from failing its lint test.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">actual</span><span class="plain-syntax"> == </span><span class="identifier-syntax">req</span><span class="plain-syntax">-1) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_isn</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node_near_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">CODE_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">isn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">code_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">;</span>
@ -1627,7 +1634,7 @@ that <span class="extract"><span class="extract-syntax">(x+1)</span></span> woul
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sub_node</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sub_node</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sub_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sub_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">=</span><span class="identifier-syntax">l</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">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">to</span><span class="plain-syntax">)</span>
@ -1690,7 +1697,7 @@ evaluation &mdash; evaluate <span class="extract"><span class="extract-syntax">a
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</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">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">n</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">);</span>
@ -1721,7 +1728,8 @@ We correct those to uses of the special <span class="extract"><span class="extra
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">A</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">B</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">OPERATION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node_near_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">OPERATION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> = </span><span class="constant-syntax">ALTERNATIVECASE_BIP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">; </span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
@ -1891,7 +1899,7 @@ level, as in the case of <span class="extract"><span class="extract-syntax">x -
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left_operand_node</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">left_operand_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">left_operand_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">=</span><span class="identifier-syntax">l</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">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">to</span><span class="plain-syntax">)</span>
@ -1907,7 +1915,7 @@ level, as in the case of <span class="extract"><span class="extract-syntax">x -
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_operand_node</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">right_operand_node</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP15" class="function-link"><span class="function-syntax">InterSchemas::changed_tokens_on</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">right_operand_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
@ -2066,7 +2074,7 @@ array lookup is performed to find the address of the function to call.
<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">from</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">to</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">from</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_isn</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">; </span><span class="identifier-syntax">l</span><span class="plain-syntax">=</span><span class="identifier-syntax">l</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">l</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">to</span><span class="plain-syntax">)</span>
@ -2091,8 +2099,9 @@ array lookup is performed to find the address of the function to call.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">isn</span><span class="plain-syntax">; </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">isn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_node</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">STATEMENT_ISNT</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="constant-syntax">RETURN_BIP</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">one</span><span class="plain-syntax"> = </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"1"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">one</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP4" class="function-link"><span class="function-syntax">InterSchemas::new_node_near_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_schema</span><span class="plain-syntax">, </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">, </span><span class="identifier-syntax">isn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"1"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">one</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">child_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">one</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parent_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">;</span>

View file

@ -95,11 +95,13 @@ states:
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preceding_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">definition_length</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_TOKSTATE</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">pos</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">definition_length</span><span class="plain-syntax">; </span><span class="identifier-syntax">pos</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">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> == </span><span class="constant-syntax">TOK_TOKSTATE</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_TOKSTATE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Absorb raw material, if any</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tokeniser_state</span><span class="plain-syntax"> = </span><span class="constant-syntax">WHITE_TOKSTATE</span><span class="plain-syntax">;</span>
@ -189,17 +191,17 @@ states:
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tokeniser_state</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">WHITE_TOKSTATE:</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">" "</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">WHITE_SPACE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">" "</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</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">DQUOTED_TOKSTATE:</span>
<span class="plain-syntax"> </span><a href="2-tkn.html#SP2" class="function-link"><span class="function-syntax">Tokenisation::de_escape_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</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">SQUOTED_TOKSTATE:</span>
<span class="plain-syntax"> </span><a href="2-tkn.html#SP4" class="function-link"><span class="function-syntax">Tokenisation::de_escape_sq_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SQUOTED_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_raw</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</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="identifier-syntax">default:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_3_1" class="named-paragraph-link"><span class="named-paragraph">Look for individual tokens</span><span class="named-paragraph-number">1.3.1</span></a></span><span class="plain-syntax">;</span>
@ -262,7 +264,7 @@ states:
<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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">source_text_fragment</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP14" class="function-link"><span class="function-syntax">InterSchemas::add_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I7_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_text_fragment</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1));</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I7_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_text_fragment</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-tkn.html#SP1_6">&#167;1.6</a>.</li></ul>
@ -302,7 +304,7 @@ a bracing.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bracing</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bracing</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bracing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">bracing</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">command</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">operand</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
@ -546,7 +548,7 @@ of modifiers are allowed. See <a href="../calculus-module/3-cs.html" class="inte
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Absorb raw material, if any</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=</span><span class="identifier-syntax">pos</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">at</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">bracing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</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">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">inline_command</span><span class="plain-syntax"> = </span><span class="constant-syntax">substitute_ISINC</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">inline_modifiers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iss_bitmap</span><span class="plain-syntax">;</span>
@ -556,7 +558,7 @@ of modifiers are allowed. See <a href="../calculus-module/3-cs.html" class="inte
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</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">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'&amp;'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"*&amp;"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INLINE_ISTT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"*&amp;"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">bracing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"*&amp;"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">inline_command</span><span class="plain-syntax"> = </span><span class="constant-syntax">combine_ISINC</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">inline_modifiers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iss_bitmap</span><span class="plain-syntax">;</span>
@ -803,7 +805,7 @@ inclusive; we ignore an empty token.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">which_rw</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_number</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">which_quote</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_3_1_4_1" class="named-paragraph-link"><span class="named-paragraph">Identify this new token</span><span class="named-paragraph-number">1.3.1.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">is</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">which</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_rw</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><a href="2-is.html#SP10" class="function-link"><span class="function-syntax">InterSchemas::new_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">is</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">which</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_rw</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_offset</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">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">which_quote</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_quoted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">[</span><span class="identifier-syntax">which_quote</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>

View file

@ -233,7 +233,7 @@ notation. For example, this:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="function-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"return true;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="function-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"return true;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">where</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="function-syntax">EmitInterSchemas::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, ..., </span><span class="identifier-syntax">sch</span><span class="plain-syntax">, ...);</span>
</pre>
<p class="commentary">generates Inter code equivalent to the example above.<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup> But the real power of

View file

@ -135,7 +135,8 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Test: parse schema from:\n%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_input</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP24" class="function-link"><span class="function-syntax">Str::trim_white_space</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_input</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><a href="../building-module/2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_input</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><a href="../building-module/2-pis.html#SP1" class="function-link"><span class="function-syntax">ParsingSchemas::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">test_input</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="../bytecode-module/3-tp.html#SP3" class="function-link"><span class="function-syntax">Provenance::at_file_and_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"hypothetical.txt"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null schema&gt;\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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node_tree</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;nodeless scheme\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="../building-module/2-is.html#SP17" class="function-link"><span class="function-syntax">InterSchemas::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">);</span>

View file

@ -687,7 +687,7 @@ not the place to explain it. See <a href="3-iibf.html" class="internal">Inter in
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-trn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">ic</li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-iibf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-trn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">ic</li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-iibf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1077,7 +1077,7 @@ function arguments are contravariant.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ivp.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresscurrent">idt</li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-mtd.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-ivp.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresscurrent">idt</li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-mtd.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -208,7 +208,7 @@ exist. See <a href="3-ic.html#SP7" class="internal">InterInstruction::tree_lint<
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-mtd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresscurrent">ie</li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="4-tcc.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-mtd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresscurrent">ie</li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-tp.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1051,7 +1051,7 @@ the definition of any symbol created in the instruction to <span class="extract"
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ic.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresscurrent">iibf</li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-iitf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-ic.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresscurrent">iibf</li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-iitf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -481,7 +481,7 @@ the filter test.
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Notation for text literals. </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">TextualInter::write_text</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">TextualInter::write_text</span></span>:<br/><a href="3-iitf.html#SP12_3">&#167;12.3</a>, <a href="3-iitf.html#SP12_5">&#167;12.5</a>, <a href="3-iitf.html#SP12_7">&#167;12.7</a>, <a href="3-iitf.html#SP12_9">&#167;12.9</a>, <a href="3-iitf.html#SP12_11">&#167;12.11</a><br/>Annotations - <a href="2-ann.html#SP14">&#167;14</a><br/>The Insert Construct - <a href="4-tic.html#SP5">&#167;5</a><br/>The Pragma Construct - <a href="4-tpc4.html#SP5">&#167;5</a><br/>The Splat Construct - <a href="5-tsc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">TextualInter::write_text</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">TextualInter::write_text</span></span>:<br/><a href="3-iitf.html#SP12_3">&#167;12.3</a>, <a href="3-iitf.html#SP12_5">&#167;12.5</a>, <a href="3-iitf.html#SP12_7">&#167;12.7</a>, <a href="3-iitf.html#SP12_9">&#167;12.9</a>, <a href="3-iitf.html#SP12_11">&#167;12.11</a><br/>Annotations - <a href="2-ann.html#SP14">&#167;14</a><br/>Text Provenance - <a href="3-tp.html#SP6">&#167;6</a><br/>The Insert Construct - <a href="4-tic.html#SP5">&#167;5</a><br/>The Pragma Construct - <a href="4-tpc4.html#SP5">&#167;5</a><br/>The Splat Construct - <a href="5-tsc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</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">WRITE</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">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
@ -853,7 +853,7 @@ therefore used typelessly.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-iibf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresscurrent">iitf</li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-vi.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-iibf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresscurrent">iitf</li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-vi.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -553,7 +553,7 @@ garbage, and doesn't take much time.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ivp.html#SP22">&#167;22</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-vi.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresscurrent">ivp</li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-idt.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-vi.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresscurrent">ivp</li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-idt.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -215,7 +215,7 @@ must then be extracted):
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-idt.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresscurrent">mtd</li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-ie.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-idt.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresscurrent">mtd</li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-ie.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -0,0 +1,151 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Text Provenance</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Text Provenance' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../intern.html">Inter Modules</a></li><li><a href="index.html">bytecode</a></li><li><a href="index.html#3">Chapter 3: Their Instructions</a></li><li><b>Text Provenance</b></li></ul></div>
<p class="purpose">Recording where fragments of text originally came from.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Inter code sometimes needs to contain fragments of not-yet-parsed Inform 6
syntax code, in the form of <span class="extract"><span class="extract-syntax">SPLAT_IST</span></span> and <span class="extract"><span class="extract-syntax">INSERT_IST</span></span> instructions. In order
for it to be possible to relate errors in those fragments to the original text
files they came from, we need to record their "provenance".
</p>
<p class="commentary">This is only a wrapper for saying something like "line 17 in <span class="extract"><span class="extract-syntax">whatever.txt</span></span>".
Line numbers count from 1 at the top of a text file.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">textual_filename</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">line_number</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure text_provenance is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>This provides a "don't know, or, it didn't come from a text file, I made it up"
value:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">Provenance::nowhere</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">Provenance::nowhere</span></span>:<br/>The Insert Construct - <a href="4-tic.html#SP6">&#167;6</a><br/>The Splat Construct - <a href="5-tsc.html#SP6">&#167;6</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">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">nowhere</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nowhere</span><span class="plain-syntax">.</span><span class="element-syntax">textual_filename</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">nowhere</span><span class="plain-syntax">.</span><span class="element-syntax">line_number</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">nowhere</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">Provenance::is_somewhere</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">Provenance::is_somewhere</span></span>:<br/><a href="3-tp.html#SP4">&#167;4</a>, <a href="3-tp.html#SP5">&#167;5</a>, <a href="3-tp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span 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::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">where</span><span class="plain-syntax">.</span><span class="element-syntax">textual_filename</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Composing:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">Provenance::at_file_and_line</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">Provenance::at_file_and_line</span></span>:<br/>The Insert Construct - <a href="4-tic.html#SP6">&#167;6</a><br/>The Splat Construct - <a href="5-tsc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">somewhere</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">somewhere</span><span class="plain-syntax">.</span><span class="element-syntax">textual_filename</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">somewhere</span><span class="plain-syntax">.</span><span class="element-syntax">line_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">line</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">somewhere</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Decomposing:
</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">Provenance::get_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</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-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::is_somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">where</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span class="plain-syntax">.</span><span class="element-syntax">line_number</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="function-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</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-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::is_somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">where</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">Filenames::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">where</span><span class="plain-syntax">.</span><span class="element-syntax">textual_filename</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Altering in place:
</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">Provenance::set_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">where</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::is_somewhere</span></a><span class="plain-syntax">(*</span><span class="identifier-syntax">where</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lc</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>Writing to text:
</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">Provenance::write</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">Provenance::write</span></span>:<br/>The Insert Construct - <a href="4-tic.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::is_somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="3-iitf.html#SP11" class="function-link"><span class="function-syntax">TextualInter::write_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">.</span><span class="element-syntax">textual_filename</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">at</span><span class="plain-syntax">.</span><span class="element-syntax">line_number</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">"&lt;nowhere&gt;"</span><span class="plain-syntax">);</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-ie.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresssection"><a href="3-vi.html">vi</a></li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresscurrent">tp</li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="4-tcc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -349,7 +349,7 @@ the context of the current package:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-iitf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresscurrent">vi</li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-ivp.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-iitf.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ic.html">ic</a></li><li class="progresssection"><a href="3-iibf.html">iibf</a></li><li class="progresssection"><a href="3-iitf.html">iitf</a></li><li class="progresscurrent">vi</li><li class="progresssection"><a href="3-ivp.html">ivp</a></li><li class="progresssection"><a href="3-idt.html">idt</a></li><li class="progresssection"><a href="3-mtd.html">mtd</a></li><li class="progresssection"><a href="3-ie.html">ie</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-tcc.html">4</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="3-ivp.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -133,7 +133,7 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ie.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresschapter"><a href="3-ic.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">tcc</li><li class="progresssection"><a href="4-tcc2.html">tcc2</a></li><li class="progresssection"><a href="4-tic.html">tic</a></li><li class="progresssection"><a href="4-tic2.html">tic2</a></li><li class="progresssection"><a href="4-tnc.html">tnc</a></li><li class="progresssection"><a href="4-tpc.html">tpc</a></li><li class="progresssection"><a href="4-tpc2.html">tpc2</a></li><li class="progresssection"><a href="4-tpc3.html">tpc3</a></li><li class="progresssection"><a href="4-tpc4.html">tpc4</a></li><li class="progresssection"><a href="4-tpc5.html">tpc5</a></li><li class="progresssection"><a href="4-tpc6.html">tpc6</a></li><li class="progresssection"><a href="4-tpc7.html">tpc7</a></li><li class="progresssection"><a href="4-ttc.html">ttc</a></li><li class="progresssection"><a href="4-tvc.html">tvc</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="4-tcc2.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-tp.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-it.html">2</a></li><li class="progresschapter"><a href="3-ic.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">tcc</li><li class="progresssection"><a href="4-tcc2.html">tcc2</a></li><li class="progresssection"><a href="4-tic.html">tic</a></li><li class="progresssection"><a href="4-tic2.html">tic2</a></li><li class="progresssection"><a href="4-tnc.html">tnc</a></li><li class="progresssection"><a href="4-tpc.html">tpc</a></li><li class="progresssection"><a href="4-tpc2.html">tpc2</a></li><li class="progresssection"><a href="4-tpc3.html">tpc3</a></li><li class="progresssection"><a href="4-tpc4.html">tpc4</a></li><li class="progresssection"><a href="4-tpc5.html">tpc5</a></li><li class="progresssection"><a href="4-tpc6.html">tpc6</a></li><li class="progresssection"><a href="4-tpc7.html">tpc7</a></li><li class="progresssection"><a href="4-ttc.html">ttc</a></li><li class="progresssection"><a href="4-tvc.html">tvc</a></li><li class="progresschapter"><a href="5-tac.html">5</a></li><li class="progresschapter"><a href="6-tpc.html">6</a></li><li class="progressnext"><a href="4-tcc2.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -172,8 +172,7 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-iitf.html#SP11" class="function-link"><span class="function-syntax">TextualInter::write_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">replacing</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-iitf.html#SP11" class="function-link"><span class="function-syntax">TextualInter::write_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="4-tic.html#SP6" class="function-link"><span class="function-syntax">InsertInstruction::file_provenance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %d"</span><span class="plain-syntax">, </span><a href="4-tic.html#SP6" class="function-link"><span class="function-syntax">InsertInstruction::line_provenance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-tp.html#SP6" class="function-link"><span class="function-syntax">Provenance::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="4-tic.html#SP6" class="function-link"><span class="function-syntax">InsertInstruction::provenance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Access functions. </b></p>
@ -191,16 +190,12 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">REPLACING_INSERT_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">InsertInstruction::file_provenance</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">InsertInstruction::file_provenance</span></span>:<br/><a href="4-tic.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">INSERT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCEFILE_INSERT_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax">}</span>
<span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="function-syntax">InsertInstruction::line_provenance</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">InsertInstruction::line_provenance</span></span>:<br/><a href="4-tic.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">INSERT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCELINE_INSERT_IFLD</span><span class="plain-syntax">];</span>
<span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">InsertInstruction::provenance</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">InsertInstruction::provenance</span></span>:<br/><a href="4-tic.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">INSERT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP3" class="function-link"><span class="function-syntax">Provenance::at_file_and_line</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCEFILE_INSERT_IFLD</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">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCELINE_INSERT_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -217,16 +217,12 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">NAMESPACE_SPLAT_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">SplatInstruction::file_provenance</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCEFILE_SPLAT_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax">}</span>
<span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::line_provenance</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCELINE_SPLAT_IFLD</span><span class="plain-syntax">];</span>
<span class="reserved-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::provenance</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-in.html#SP13" class="function-link"><span class="function-syntax">Inode::isnt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP2" class="function-link"><span class="function-syntax">Provenance::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-tp.html#SP3" class="function-link"><span class="function-syntax">Provenance::at_file_and_line</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-in.html#SP14" class="function-link"><span class="function-syntax">Inode::ID_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCEFILE_SPLAT_IFLD</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">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">PROVENANCELINE_SPLAT_IFLD</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. PLMs. </b>At some point PLM stood for something, but what it was is now forgotten &mdash;

View file

@ -186,6 +186,11 @@
<spon class="sectiontitle">Inter Errors</span></a> -
<span class="sectionpurpose">To issue error messages arising from loading incorrect Inter code from files.</span></p>
</li>
<li>
<p class="sectionentry"><a href="3-tp.html">
<spon class="sectiontitle">Text Provenance</span></a> -
<span class="sectionpurpose">Recording where fragments of text originally came from.</span></p>
</li>
</ul>
</li>
<li>

View file

@ -693,24 +693,27 @@ in <span class="extract"><span class="extract-syntax">Include (- ... -)</span></
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceProblems::I6_level_error</span><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quote</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">file_ref</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</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">file</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">file_ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">F</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="string-syntax">"%f"</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</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">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
<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">Filenames::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">".i6t"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sections"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</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">file</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::get_leafname</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">EX</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">".i6t"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sections"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Pathnames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Pathnames::directory_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</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">file</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Filenames::get_leafname</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">));</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">EX</span><span class="plain-syntax">)</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">EX</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">trigger_kit_notice</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">general_kit_notice_issued</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...));</span>
@ -737,7 +740,7 @@ in <span class="extract"><span class="extract-syntax">Include (- ... -)</span></
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">kit</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">general_kit_notice_issued</span><span class="plain-syntax">) </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"%2, near line %3: %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="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"Near line %3 of file %2 in %4: %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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">file</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%S, line %d:\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::problem_quote_file</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>

View file

@ -301,7 +301,8 @@ never run through <a href="3-cid.html#SP2" class="internal">CompileImperativeDef
<span class="plain-syntax"> </span><span class="identifier-syntax">ParsingSchemas::from_inline_phrase_definition</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-cid.html#SP6" class="function-link"><span class="function-syntax">CompileImperativeDefn::get_inline_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">inline_front_schema</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">inline_back_schema</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">inline_back_schema</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><a href="3-cid.html#SP7" class="function-link"><span class="function-syntax">CompileImperativeDefn::issue_schema_errors</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">inline_front_schema</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">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">inline_back_schema</span><span class="plain-syntax">);</span>

View file

@ -214,26 +214,40 @@ what the red button marked "danger" does.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location_set</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="identifier-syntax">kit_error_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kit_error_filename</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_line_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::set_kit_error_location</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">PipelineErrors::set_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</a>, <a href="3-css.html#SP3_1">&#167;3.1</a>, <a href="3-css.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_filename</span><span class="plain-syntax"> = </span><span class="identifier-syntax">file</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_line_number</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">line</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::get_kit_error_location</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">PipelineErrors::get_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_2_3_2_3">&#167;3.2.3.2.3</a>, <a href="3-css.html#SP7_10">&#167;7.10</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kit_error_location_set</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><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">kit_error_location</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">PipelineErrors::clear_kit_error_location</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">PipelineErrors::clear_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</a>, <a href="3-css.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Provenance::nowhere</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">PipelineErrors::set_kit_error_location</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">PipelineErrors::set_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location_set</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">kit_error_location</span><span class="plain-syntax"> = </span><span class="identifier-syntax">where</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">PipelineErrors::kit_error</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">PipelineErrors::kit_error</span></span>:<br/>Parsing Stages - <a href="3-ps.html#SP2_5">&#167;2.5</a>, <a href="3-ps.html#SP7">&#167;7</a><br/>Resolve Conditional Compilation Stage - <a href="3-rccs.html#SP2">&#167;2</a>, <a href="3-rccs.html#SP3_4">&#167;3.4</a>, <a href="3-rccs.html#SP3_2_2">&#167;3.2.2</a>, <a href="3-rccs.html#SP3_5">&#167;3.5</a>, <a href="3-rccs.html#SP3_6">&#167;3.6</a><br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_4_5_1">&#167;3.1.3.1.4.5.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_1_1">&#167;3.1.3.1.4.5.2.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1">&#167;3.1.3.1.4.5.2.2.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1_1">&#167;3.1.3.1.4.5.2.2.1.1</a>, <a href="3-css.html#SP3_2_1">&#167;3.2.1</a>, <a href="3-css.html#SP3_2_2">&#167;3.2.2</a>, <a href="3-css.html#SP3_2_3_2_1">&#167;3.2.3.2.1</a>, <a href="3-css.html#SP4">&#167;4</a>, <a href="3-css.html#SP7_8">&#167;7.8</a>, <a href="3-css.html#SP7_10">&#167;7.10</a>, <a href="3-css.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quote</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</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">PipelineErrors::set_kit_error_location_near_splat</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_1">&#167;3.1</a>, <a href="3-css.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</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">P</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Inode::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::provenance</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::kit_error</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">PipelineErrors::kit_error</span></span>:<br/>Parsing Stages - <a href="3-ps.html#SP2_5">&#167;2.5</a>, <a href="3-ps.html#SP7">&#167;7</a><br/>Resolve Conditional Compilation Stage - <a href="3-rccs.html#SP2">&#167;2</a>, <a href="3-rccs.html#SP3_4">&#167;3.4</a>, <a href="3-rccs.html#SP3_2_2">&#167;3.2.2</a>, <a href="3-rccs.html#SP3_5">&#167;3.5</a>, <a href="3-rccs.html#SP3_6">&#167;3.6</a><br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_4_5_1">&#167;3.1.3.1.4.5.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_1_1">&#167;3.1.3.1.4.5.2.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1">&#167;3.1.3.1.4.5.2.2.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1_1">&#167;3.1.3.1.4.5.2.2.1.1</a>, <a href="3-css.html#SP3_2_1">&#167;3.2.1</a>, <a href="3-css.html#SP3_2_2">&#167;3.2.2</a>, <a href="3-css.html#SP3_2_3_2_1">&#167;3.2.3.2.1</a>, <a href="3-css.html#SP4">&#167;4</a>, <a href="3-css.html#SP7_8">&#167;7.8</a>, <a href="3-css.html#SP7_10">&#167;7.10</a>, <a href="3-css.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quote</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><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">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::I6_level_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_error_filename</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_line_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::I6_level_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit_error_filename</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit_error_filename</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</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">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::at_position_S</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">kit_error_line_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::at_position_S</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</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">Errors::with_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
@ -242,11 +256,12 @@ what the red button marked "danger" does.
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_count</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">PipelineErrors::reset_errors</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">PipelineErrors::reset_errors</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::reset_errors</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::reset_errors</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::errors_occurred</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">PipelineErrors::errors_occurred</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</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">PipelineErrors::errors_occurred</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::errors_occurred</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kit_error_count</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -106,17 +106,16 @@ function definition, that is quite a lot of work.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::run</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">CompileSplatsStage::run</span></span>:<br/><a href="3-css.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::reset_errors</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</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">compile_splats_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">css</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Initialise the CS state</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor1</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor2</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">errors_found</span><span class="plain-syntax"> = </span><a href="3-css.html#SP13" class="function-link"><span class="function-syntax">CompileSplatsStage::function_bodies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">errors_found</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor3</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::errors_occurred</span></a><span class="plain-syntax">()) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -220,11 +219,7 @@ is being compiled.
</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">SplatInstruction::line_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::file_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">SplatInstruction::line_provenance</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">else</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">proceed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -951,11 +946,7 @@ in this section.
</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">SplatInstruction::line_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::file_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">SplatInstruction::line_provenance</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">else</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">local_var_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">body</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">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">SplatInstruction::plm</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ROUTINE_PLM</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_2_1" class="named-paragraph-link"><span class="named-paragraph">Parse the routine header</span><span class="named-paragraph-number">3.2.1</span></a></span><span class="plain-syntax">;</span>
@ -1131,7 +1122,7 @@ which contains the actual code.
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</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">B</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">InterBookmark::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-css.html#SP12" class="function-link"><span class="function-syntax">CompileSplatsStage::function_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">IP</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">block_bookmark</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::namespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::namespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP3_2_3_2">&#167;3.2.3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Inform 6 annotations. </b></p>
@ -1509,7 +1500,8 @@ before they are needed.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParsingSchemas::from_text</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">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">excess_tokens</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">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result_s</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="3-css.html#SP8" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_tree</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">excess_tokens</span><span class="plain-syntax">);</span>
@ -1705,12 +1697,13 @@ by storing up a list of requests to do the work:
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">namespace</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">function_body_request</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::function_body</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">CompileSplatsStage::function_body</span></span>:<br/><a href="3-css.html#SP3_2_3_2_3">&#167;3.2.3.2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">compile_splats_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">block_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">offset</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">bb</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">namespace</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span 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::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">function_body_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">function_body_request</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">block_bookmark</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bb</span><span class="plain-syntax">;</span>
@ -1721,6 +1714,7 @@ by storing up a list of requests to do the work:
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">namespace</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">namespace</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">function_body_request</span><span class="plain-syntax">, </span><span class="identifier-syntax">css</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_bodies_to_compile</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -1739,7 +1733,7 @@ kit <span class="extract"><span class="extract-syntax">CommandParserKit</span></
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">function_body_request</span><span class="plain-syntax">, </span><span class="identifier-syntax">css</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function_bodies_to_compile</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">SCHEMA_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"=======\n\nFunction (%S) len %d: '%S'\n\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterPackage::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">block_package</span><span class="plain-syntax">), </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">), </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsing_errors</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-css.html#SP14" class="function-link"><span class="function-syntax">CompileSplatsStage::report_kit_errors</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -1784,11 +1778,13 @@ kit <span class="extract"><span class="extract-syntax">CommandParserKit</span></
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsing_errors</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parsing_errors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</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">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"in function '%S': %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"inform 6 syntax error %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 syntax error %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</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">msg</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -161,8 +161,7 @@ it from there.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterBookmark::after_this_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">docket_state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">docket_state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">assimilation_point</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">here</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">docket_state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">file_provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InsertInstruction::file_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">docket_state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InsertInstruction::line_provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">docket_state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InsertInstruction::provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SimpleTangler::tangle_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">docket</span><span class="plain-syntax">, </span><span class="identifier-syntax">insertion</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">replacing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InsertInstruction::replacing</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">replacing</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
@ -193,8 +192,7 @@ in <span class="extract"><span class="extract-syntax">K/Sections</span></span>.
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">assimilation_point</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">namespace</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">file_provenance</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">line_provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure rpi_docket_state is accessed in 3/css and here.</li></ul>
@ -210,8 +208,7 @@ in <span class="extract"><span class="extract-syntax">K/Sections</span></span>.
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">assimilation_point</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">assimilation_point</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">namespace</span><span class="plain-syntax"> = </span><span class="identifier-syntax">namespacename</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">file_provenance</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">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">line_provenance</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">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">docket</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SimpleTangler::new_docket</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> &amp;(</span><a href="3-ps.html#SP6" class="function-link"><span class="function-syntax">ParsingStages::receive_raw</span></a><span class="plain-syntax">),</span>
<span class="plain-syntax"> &amp;(</span><a href="3-ps.html#SP3" class="function-link"><span class="function-syntax">ParsingStages::receive_command</span></a><span class="plain-syntax">),</span>
@ -321,15 +318,16 @@ functions). So for example
<span class="definition-keyword">define</span> <span class="constant-syntax">COMMENTED_I6TBIT</span><span class="plain-syntax"> </span><span class="constant-syntax">8</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ROUTINED_I6TBIT</span><span class="plain-syntax"> </span><span class="constant-syntax">16</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">CONTENT_ON_LINE_I6TBIT</span><span class="plain-syntax"> </span><span class="constant-syntax">32</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">NOTE_LINES_I6TBIT</span><span class="plain-syntax"> </span><span class="constant-syntax">64</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">SUBORDINATE_I6TBITS</span>
<span class="plain-syntax"> (</span><span class="constant-syntax">COMMENTED_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">SQUOTED_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">DQUOTED_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">ROUTINED_I6TBIT</span><span class="plain-syntax">)</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">ParsingStages::receive_raw</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">ParsingStages::receive_raw</span></span>:<br/><a href="3-ps.html#SP2_5">&#167;2.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">simple_tangle_docket</span><span class="plain-syntax"> *</span><span class="identifier-syntax">docket</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">IGNORE_WS_I6TBIT</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">mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">IGNORE_WS_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">NOTE_LINES_I6TBIT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">state</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">lc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</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">lc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</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">pos</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">); </span><span class="identifier-syntax">pos</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span 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="constant-syntax">10</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">13</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="character-syntax">'\n'</span><span class="plain-syntax">; </span><span class="identifier-syntax">lc</span><span class="plain-syntax">++; }</span>
@ -344,16 +342,18 @@ functions). So for example
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in_number</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">number_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">file_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">number_text</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">lc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">file_provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">file_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Spotted %d and &lt;%S&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">file_provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">number_text</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">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::at_file_and_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">file_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">lc</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">number_text</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">IGNORE_WS_I6TBIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">))) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> -= </span><span class="constant-syntax">IGNORE_WS_I6TBIT</span><span 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"> &amp; </span><span class="constant-syntax">NOTE_LINES_I6TBIT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> -= </span><span class="constant-syntax">NOTE_LINES_I6TBIT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::set_line</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">), </span><span class="identifier-syntax">lc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'!'</span><span class="plain-syntax">) &amp;&amp; (!(</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; (</span><span class="constant-syntax">DQUOTED_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">SQUOTED_I6TBIT</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> | </span><span class="constant-syntax">COMMENTED_I6TBIT</span><span class="plain-syntax">;</span>
@ -390,12 +390,12 @@ functions). So for example
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">';'</span><span class="plain-syntax">) &amp;&amp; (!(</span><span class="identifier-syntax">mode</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SUBORDINATE_I6TBITS</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="3-ps.html#SP7" class="function-link"><span class="function-syntax">ParsingStages::splat</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">docket</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">IGNORE_WS_I6TBIT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::set_line</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">), </span><span class="identifier-syntax">lc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">IGNORE_WS_I6TBIT</span><span class="plain-syntax"> + </span><span class="constant-syntax">NOTE_LINES_I6TBIT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="3-ps.html#SP7" class="function-link"><span class="function-syntax">ParsingStages::splat</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">docket</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">line_provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::set_line</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">), </span><span class="identifier-syntax">lc</span><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">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -421,12 +421,9 @@ state being carried in the docket.
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
<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">NULL</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">lc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">file_provenance</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">file_provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">line_provenance</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">current_filename</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">current_filename</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = </span><span class="constant-syntax">25</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">namespace</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">lc</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">InterBookmark::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>

View file

@ -1,4 +1,4 @@
Total memory consumption was 121595K = 119 MB
Total memory consumption was 121599K = 119 MB
---- was used for 2059550 objects, in 367490 frames in 0 x 800K = 0K = 0 MB:
@ -14,8 +14,8 @@ Total memory consumption was 121595K = 119 MB
2.7% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
2.5% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
2.1% kind_array 67 x 1000 = 67000 objects, 2682144 bytes
1.7% inter_schema_token 14043 objects, 2134536 bytes
1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.6% inter_schema_token 14043 objects, 2022192 bytes
1.4% package_request 21186 objects, 1864368 bytes
1.4% vocabulary_entry_array 164 x 100 = 16400 objects, 1842048 bytes
1.2% dict_entry_array 477 x 100 = 47700 objects, 1541664 bytes
@ -25,13 +25,13 @@ Total memory consumption was 121595K = 119 MB
1.0% inter_package 26632 objects, 1278336 bytes
0.9% map_data 672 objects, 1128960 bytes
0.8% id_body 947 objects, 1083368 bytes
0.8% inter_schema_node 8968 objects, 1004416 bytes
0.8% adjective_meaning 202 objects, 1000304 bytes
0.7% excerpt_meaning 3117 objects, 972504 bytes
0.7% production 3957 objects, 918024 bytes
0.7% ptoken 8588 objects, 893152 bytes
0.7% grammatical_usage 3636 objects, 872640 bytes
0.6% individual_form 2566 objects, 862176 bytes
0.6% inter_schema_node 8968 objects, 860928 bytes
0.5% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
0.3% verb_usage 1148 objects, 394912 bytes
@ -51,11 +51,11 @@ Total memory consumption was 121595K = 119 MB
0.1% nascent_array 2125 objects, 136000 bytes
---- inference 1703 objects, 122616 bytes
---- documentation_ref 1270 objects, 111760 bytes
---- inter_schema 1524 objects, 109728 bytes
---- imperative_defn 1384 objects, 99648 bytes
---- noun_usage 2407 objects, 96280 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- preposition 274 objects, 87680 bytes
---- inter_schema 1524 objects, 85344 bytes
---- inter_tree 6 objects, 81744 bytes
---- lexical_cluster 2521 objects, 80672 bytes
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
@ -86,8 +86,8 @@ Total memory consumption was 121595K = 119 MB
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- parsing_data 672 objects, 37632 bytes
---- production_list 630 objects, 35280 bytes
---- counting_data 672 objects, 32256 bytes
---- regions_data 672 objects, 32256 bytes
---- counting_data 672 objects, 32256 bytes
---- property_permission 96 objects, 31488 bytes
---- verb_sense 407 objects, 29304 bytes
---- stack_frame_box 305 objects, 29280 bytes
@ -149,37 +149,37 @@ Total memory consumption was 121595K = 119 MB
---- definition 44 objects, 3168 bytes
---- target_vm 20 objects, 2880 bytes
---- use_option 29 objects, 2552 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- JSON_type 33 objects, 2376 bytes
---- scene 1 object, 2352 bytes
---- JSON_single_requirement 49 objects, 2352 bytes
---- build_step 28 objects, 2016 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- compiler_feature 30 objects, 1680 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- table_contribution_array 1 x 100 objects, 1632 bytes
---- inform_pipeline 24 objects, 1536 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- inter_node_array 35 objects, 1400 bytes
---- inbuild_requirement 35 objects, 1400 bytes
---- inter_node_array 35 objects, 1400 bytes
---- special_meaning_holder 35 objects, 1400 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- JSON_requirement 38 objects, 1216 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- tree_inventory_item 28 objects, 1120 bytes
---- inbuild_search_result 28 objects, 1120 bytes
---- tree_inventory_item 28 objects, 1120 bytes
---- submodule_identity 33 objects, 1056 bytes
---- runtime_kind_structure 13 objects, 1040 bytes
---- quantifier 16 objects, 1024 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- pipeline_stage 20 objects, 960 bytes
---- web_md 6 objects, 864 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- JSON_pair_requirement 27 objects, 864 bytes
---- web_md 6 objects, 864 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
@ -195,10 +195,10 @@ Total memory consumption was 121595K = 119 MB
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- chapter_md 6 objects, 528 bytes
---- equation 4 objects, 480 bytes
---- module 6 objects, 480 bytes
---- i6_memory_setting 14 objects, 448 bytes
---- equation 4 objects, 480 bytes
---- bp_family 14 objects, 448 bytes
---- i6_memory_setting 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- inbuild_genre 8 objects, 384 bytes
---- article_usage 8 objects, 384 bytes
@ -248,7 +248,7 @@ Total memory consumption was 121595K = 119 MB
100.0% was used for memory not allocated for objects:
57.0% text stream storage 70976924 bytes in 482872 claims
57.0% text stream storage 70981292 bytes in 482888 claims
4.2% dictionary storage 5315584 bytes in 7623 claims
---- sorting 2720 bytes in 387 claims
5.7% source text 7200000 bytes in 3 claims
@ -266,5 +266,5 @@ Total memory consumption was 121595K = 119 MB
---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280544 bytes in 2001 claims
-151.-4% was overhead - -188610272 bytes = -184189K = -179 MB
-151.-6% was overhead - -188890488 bytes = -184463K = -180 MB

View file

@ -1,33 +1,33 @@
100.0% in inform7 run
69.8% in compilation to Inter
49.2% in //Sequence::undertake_queued_tasks//
4.8% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.6% in //RTPhrasebook::compile_entries//
1.4% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
0.6% in //MajorNodes::pass_2//
0.6% in //Sequence::undertake_queued_tasks//
0.6% in //Sequence::undertake_queued_tasks//
0.6% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block//
0.2% in //CompletionModule::compile//
0.2% in //InferenceSubjects::emit_all//
0.2% in //RTKindConstructors::compile_permissions//
0.2% in //Task::make_built_in_kind_constructors//
2.8% not specifically accounted for
26.7% in running Inter pipeline
70.5% in compilation to Inter
49.8% in //Sequence::undertake_queued_tasks//
4.9% in //MajorNodes::pre_pass//
3.5% in //MajorNodes::pass_1//
1.7% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile//
1.5% in //RTPhrasebook::compile_entries//
1.1% in //Sequence::lint_inter//
0.5% in //MajorNodes::pass_2//
0.5% in //Sequence::undertake_queued_tasks//
0.5% in //Sequence::undertake_queued_tasks//
0.5% in //World::stage_V//
0.3% in //ImperativeDefinitions::compile_first_block//
0.1% in //CompletionModule::compile//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.5% not specifically accounted for
25.8% in running Inter pipeline
10.0% in step 14/15: generate inform6 -> auto.inf
6.0% in step 5/15: load-binary-kits
5.4% in step 6/15: make-synoptic-module
1.8% in step 9/15: make-identifiers-unique
0.4% in step 12/15: eliminate-redundant-operations
0.4% in step 4/15: compile-splats
0.4% in step 7/15: shorten-wiring
0.4% in step 8/15: detect-indirect-calls
0.2% in step 10/15: reconcile-verbs
0.2% in step 11/15: eliminate-redundant-labels
1.4% not specifically accounted for
3.0% in supervisor
0.5% not specifically accounted for
5.6% in step 5/15: load-binary-kits
5.2% in step 6/15: make-synoptic-module
1.7% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
0.1% in step 11/15: eliminate-redundant-labels
1.3% not specifically accounted for
3.1% in supervisor
0.4% not specifically accounted for

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformExtrasKit",
"version": "10.2.0-beta+6W37"
"version": "10.2.0-beta+6W38"
},
"kit-details": {
"has-priority": 1

View file

@ -2,7 +2,7 @@
"is": {
"type": "kit",
"title": "BasicInformKit",
"version": "10.2.0-beta+6W37"
"version": "10.2.0-beta+6W38"
},
"needs": [ {
"unless": {

View file

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

View file

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

View file

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

View file

@ -635,24 +635,27 @@ void SourceProblems::kit_notification(text_stream *kit_name, text_stream *archit
}
void SourceProblems::I6_level_error(char *message, text_stream *quote,
text_stream *file_ref, int line) {
text_provenance at) {
filename *F = Provenance::get_filename(at);
int line = Provenance::get_line(at);
TEMPORARY_TEXT(file)
WRITE_TO(file, "%S", file_ref);
if (F) WRITE_TO(file, "%f", F);
TEMPORARY_TEXT(kit)
TEMPORARY_TEXT(M)
WRITE_TO(M, message, quote);
filename *F = Filenames::from_text(file);
TEMPORARY_TEXT(EX)
Filenames::write_extension(EX, F);
if (Str::eq_insensitive(EX, I".i6t")) {
pathname *P = Filenames::up(F);
if (Str::eq_insensitive(Pathnames::directory_name(P), I"Sections"))
P = Pathnames::up(P);
WRITE_TO(kit, "%S", Pathnames::directory_name(P));
Str::clear(file);
WRITE_TO(file, "%S", Filenames::get_leafname(F));
if (Provenance::is_somewhere(at)) {
TEMPORARY_TEXT(EX)
Filenames::write_extension(EX, F);
if (Str::eq_insensitive(EX, I".i6t")) {
pathname *P = Filenames::up(F);
if (Str::eq_insensitive(Pathnames::directory_name(P), I"Sections"))
P = Pathnames::up(P);
WRITE_TO(kit, "%S", Pathnames::directory_name(P));
Str::clear(file);
WRITE_TO(file, "%S", Filenames::get_leafname(F));
}
DISCARD_TEXT(EX)
}
DISCARD_TEXT(EX)
if (trigger_kit_notice) {
if (general_kit_notice_issued == FALSE) {
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
@ -679,7 +682,7 @@ void SourceProblems::I6_level_error(char *message, text_stream *quote,
Problems::quote_stream(4, kit);
if (general_kit_notice_issued) Problems::issue_problem_segment("%2, near line %3: %1.");
else Problems::issue_problem_segment("Near line %3 of file %2 in %4: %1.");
} else if (Str::len(file) > 0) {
} else if (Provenance::is_somewhere(at)) {
LOG("%S, line %d:\n", file, line);
Problems::problem_quote_file(2, file, line);
Problems::issue_problem_segment(

View file

@ -215,7 +215,8 @@ inter_schema *CompileImperativeDefn::get_back_schema(id_body *idb) {
ParsingSchemas::from_inline_phrase_definition(
CompileImperativeDefn::get_inline_definition(idb),
&(idb->compilation_data.inline_front_schema),
&(idb->compilation_data.inline_back_schema));
&(idb->compilation_data.inline_back_schema),
Provenance::nowhere());
CompileImperativeDefn::issue_schema_errors(current_sentence,
idb->compilation_data.inline_front_schema,
idb->compilation_data.inline_back_schema);

View file

@ -1,21 +1,21 @@
inter: inform 6 syntax error in function 'E1': operator '+' used with 1 not 2 operand(s)
inter: inform 6 syntax error in function 'E2': do without until
inter: inform 6 syntax error in function 'E3': expected 'on' or 'off' after 'font', not 'whatever'
inter: inform 6 syntax error in function 'E4': move without to
inter: inform 6 syntax error in function 'E5': 'for' header with too few clauses
inter: inform 6 syntax error in function 'E6': 'for' header with too many clauses
inter: inform 6 syntax error in function 'E7': unexpected '{ ... }' code block
inter: inform 6 syntax error in function 'E8': unexpected '{'
inter: inform 6 syntax error in function 'E8': unexpected use of reserved word 'print'
inter: inform 6 syntax error in function 'E8': unexpected '}'
inter: inform 6 syntax error in function 'E9': no matching '#endif'
inter: inform 6 syntax error in function 'E9': misplaced directive
inter: inform 6 syntax error in function 'E10': unexpected ','
inter: inform 6 syntax error in function 'E11': malformed '#if...'
inter: inform 6 syntax error in function 'E11': misplaced directive
inter: inform 6 syntax error in function 'E11': misplaced directive
inter: inform 6 syntax error in function 'E12': '@something' was unexpected in expression context
inter: inform 6 syntax error in function 'E13': too many arguments for call-message
inter: inform 6 syntax error in function 'E14': malformed literal number '$ffa0z'
inter: inform 6 syntax error in function 'E15': unexpected use of reserved word 'return'
inter: inform 6 syntax error in function 'E16': 'objectloop' without visible variable
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 11: Inform 6 syntax error in function 'E1': operator '+' used with 1 not 2 operand(s)
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 13: Inform 6 syntax error in function 'E2': do without until
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 19: Inform 6 syntax error in function 'E3': expected 'on' or 'off' after 'font', not 'whatever'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 21: Inform 6 syntax error in function 'E4': move without to
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 23: Inform 6 syntax error in function 'E5': 'for' header with too few clauses
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 25: Inform 6 syntax error in function 'E6': 'for' header with too many clauses
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 27: Inform 6 syntax error in function 'E7': unexpected '{ ... }' code block
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 29: Inform 6 syntax error in function 'E8': unexpected '{'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 29: Inform 6 syntax error in function 'E8': unexpected use of reserved word 'print'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 29: Inform 6 syntax error in function 'E8': unexpected '}'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 31: Inform 6 syntax error in function 'E9': no matching '#endif'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 31: Inform 6 syntax error in function 'E9': misplaced directive
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 33: Inform 6 syntax error in function 'E10': unexpected ','
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 35: Inform 6 syntax error in function 'E11': malformed '#if...'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 35: Inform 6 syntax error in function 'E11': misplaced directive
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 35: Inform 6 syntax error in function 'E11': misplaced directive
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 37: Inform 6 syntax error in function 'E12': '@something' was unexpected in expression context
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 39: Inform 6 syntax error in function 'E13': too many arguments for call-message
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 41: Inform 6 syntax error in function 'E14': malformed literal number '$ffa0z'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 43: Inform 6 syntax error in function 'E15': unexpected use of reserved word 'return'
inter: inter/Tests/Kits/_kits/BadKit/Sections/Wrong Wrong Wrong.i6t, line 45: Inform 6 syntax error in function 'E16': 'objectloop' without visible variable

View file

@ -17,17 +17,19 @@ typedef struct inter_schema {
int mid_case; /* does this seem to be used inside a switch case? */
int dereference_mode; /* emit from this in dereference-pointers mode */
struct linked_list *parsing_errors; /* of |schema_parsing_error| */
struct text_provenance provenance;
CLASS_DEFINITION
} inter_schema;
@ =
inter_schema *InterSchemas::new(text_stream *source) {
inter_schema *InterSchemas::new(text_stream *source, text_provenance provenance) {
inter_schema *sch = CREATE(inter_schema);
sch->converted_from = Str::duplicate(source);
sch->node_tree = NULL;
sch->mid_case = FALSE;
sch->dereference_mode = FALSE;
sch->parsing_errors = NULL;
sch->provenance = provenance;
return sch;
}
@ -68,11 +70,13 @@ typedef struct inter_schema_node {
int blocked_by_conditional; /* used in code generation */
struct text_provenance provenance; /* used for error reporting */
CLASS_DEFINITION
} inter_schema_node;
@ =
inter_schema_node *InterSchemas::new_node(inter_schema *sch, int isnt) {
inter_schema_node *InterSchemas::new_node(inter_schema *sch, int isnt,
inter_schema_token *near_here) {
inter_schema_node *isn = CREATE(inter_schema_node);
isn->parent_schema = sch;
@ -92,6 +96,17 @@ inter_schema_node *InterSchemas::new_node(inter_schema *sch, int isnt) {
isn->unopened = FALSE;
isn->blocked_by_conditional = FALSE;
isn->provenance = (sch)?(sch->provenance):(Provenance::nowhere());
if ((near_here) && (Provenance::is_somewhere(isn->provenance)))
Provenance::set_line(&(isn->provenance),
Provenance::get_line(isn->provenance) + near_here->line_offset);
return isn;
}
inter_schema_node *InterSchemas::new_node_near_node(inter_schema *sch, int isnt,
inter_schema_node *near_here) {
inter_schema_node *isn = InterSchemas::new_node(sch, isnt, NULL);
if (near_here) isn->provenance = near_here->provenance;
return isn;
}
@ -141,7 +156,7 @@ void InterSchemas::mark_unopened(inter_schema_node *isn) {
inter_schema *sch = isn->parent_schema;
inter_schema_node *top = sch->node_tree;
inter_schema_node *code_isn =
InterSchemas::new_node(isn->parent_schema, CODE_ISNT);
InterSchemas::new_node(isn->parent_schema, CODE_ISNT, NULL);
code_isn->child_node = top;
sch->node_tree = code_isn;
for (inter_schema_node *n = top; n; n = n->next_node)
@ -232,13 +247,13 @@ typedef struct inter_schema_token {
int preinsert; /* fleeting markers only */
int postinsert;
int line_offset; /* counting lines for error message use */
CLASS_DEFINITION
} inter_schema_token;
@ =
inter_schema_token *InterSchemas::new_token(int type, text_stream *material,
inter_ti operation_primitive, int reserved_word, int n) {
inter_ti operation_primitive, int reserved_word, int n, int offset) {
inter_schema_token *t = CREATE(inter_schema_token);
t->ist_type = type;
t->material = Str::duplicate(material);
@ -260,6 +275,7 @@ inter_schema_token *InterSchemas::new_token(int type, text_stream *material,
t->constant_number = n;
t->preinsert = FALSE;
t->postinsert = FALSE;
t->line_offset = offset;
return t;
}
@ -376,7 +392,7 @@ inter_schema_token *InterSchemas::new_token(int type, text_stream *material,
=
void InterSchemas::add_token(inter_schema *sch, inter_schema_token *t) {
if (sch->node_tree == NULL)
sch->node_tree = InterSchemas::new_node(sch, EXPRESSION_ISNT);
sch->node_tree = InterSchemas::new_node(sch, EXPRESSION_ISNT, t);
InterSchemas::add_token_to_node(sch->node_tree, t);
}
@ -457,6 +473,11 @@ void InterSchemas::log_depth(inter_schema_node *isn, int depth) {
InterSchemas::log_just(isn, depth);
}
void InterSchemas::log_just(inter_schema_node *isn, int depth) {
if (Provenance::is_somewhere(isn->provenance)) {
LOG("%04d ", Provenance::get_line(isn->provenance));
} else {
LOG(".... ");
}
if (isn->blocked_by_conditional) LOG("XX"); else LOG(" ");
for (int d = 0; d < depth; d++) LOG(" ");
switch (isn->isn_type) {
@ -639,6 +660,7 @@ which, of course, it usually isn't.
=
typedef struct schema_parsing_error {
struct text_stream *message;
struct text_provenance provenance;
CLASS_DEFINITION
} schema_parsing_error;
@ -648,6 +670,13 @@ void InterSchemas::throw_error(inter_schema_node *at, text_stream *message) {
at->parent_schema->parsing_errors = NEW_LINKED_LIST(schema_parsing_error);
schema_parsing_error *err = CREATE(schema_parsing_error);
err->message = Str::duplicate(message);
if (at) {
if (Provenance::is_somewhere(at->provenance)) err->provenance = at->provenance;
else if (at->parent_schema) err->provenance = at->parent_schema->provenance;
else err->provenance = Provenance::nowhere();
} else {
err->provenance = Provenance::nowhere();
}
ADD_TO_LINKED_LIST(err, schema_parsing_error, at->parent_schema->parsing_errors);
LOG("Schema error: %S\n", message);
LOG("$1\n", at->parent_schema);

View file

@ -14,8 +14,8 @@ Note that the results can be tested independently of //inform7// using the
samples produce the correct schemas.
=
inter_schema *ParsingSchemas::from_text(text_stream *from) {
return ParsingSchemas::back_end(from, FALSE, 0, NULL);
inter_schema *ParsingSchemas::from_text(text_stream *from, text_provenance provenance) {
return ParsingSchemas::back_end(from, FALSE, 0, NULL, provenance);
}
@h Abbreviated I6S notation.
@ -45,7 +45,7 @@ inter_schema *ParsingSchemas::from_i6s(text_stream *from,
if (de) return (inter_schema *) Dictionaries::value_for_entry(de);
inter_schema *result = ParsingSchemas::back_end(from, TRUE,
no_quoted_inames, quoted_inames);
no_quoted_inames, quoted_inames, Provenance::nowhere());
Dictionaries::create(i6s_inter_schema_cache, from);
Dictionaries::write_value(i6s_inter_schema_cache, from, (void *) result);
@ -84,16 +84,16 @@ so it's the caller's responsibility to check for those and act accordingly.
=
void ParsingSchemas::from_inline_phrase_definition(wchar_t *from, inter_schema **head,
inter_schema **tail) {
inter_schema **tail, text_provenance provenance) {
*head = NULL; *tail = NULL;
text_stream *head_defn = Str::new();
text_stream *tail_defn = Str::new();
@<Fetch the head and tail definitions@>;
*head = ParsingSchemas::from_text(head_defn);
*head = ParsingSchemas::from_text(head_defn, provenance);
if (Str::len(tail_defn) > 0)
*tail = ParsingSchemas::from_text(tail_defn);
*tail = ParsingSchemas::from_text(tail_defn, provenance);
}
@ A tail will only be present if the definition contains |{-block}|. If it
@ -148,8 +148,8 @@ and then this will work as might be hoped:
=
inter_schema *ParsingSchemas::back_end(text_stream *from, int abbreviated,
int no_quoted_inames, void **quoted_inames) {
inter_schema *sch = InterSchemas::new(from);
int no_quoted_inames, void **quoted_inames, text_provenance provenance) {
inter_schema *sch = InterSchemas::new(from, provenance);
if ((Log::aspect_switched_on(SCHEMA_COMPILATION_DA)) ||
(Log::aspect_switched_on(SCHEMA_COMPILATION_DETAILS_DA)))
LOG("\n\n------------\nCompiling inter schema from: <%S>\n", from);

View file

@ -130,14 +130,14 @@ int Ramification::implied_braces(inter_schema_node *par, inter_schema_node *at)
if ((prev) && (t->preinsert > 0)) {
t->preinsert--;
inter_schema_token *open_b =
InterSchemas::new_token(OPEN_BRACE_ISTT, I"{", 0, 0, -1);
InterSchemas::new_token(OPEN_BRACE_ISTT, I"{", 0, 0, -1, t->line_offset);
InterSchemas::add_token_after(open_b, prev);
changed = TRUE;
}
if (t->postinsert > 0) {
t->postinsert--;
inter_schema_token *close_b =
InterSchemas::new_token(CLOSE_BRACE_ISTT, I"}", 0, 0, -1);
InterSchemas::new_token(CLOSE_BRACE_ISTT, I"}", 0, 0, -1, t->line_offset);
InterSchemas::add_token_after(close_b, t);
changed = TRUE;
}
@ -210,12 +210,12 @@ int Ramification::unbrace_schema(inter_schema_node *par, inter_schema_node *isn)
if ((prev) && (t->ist_type == OPEN_BRACE_ISTT)) {
prev->next = NULL;
inter_schema_node *code_isn =
InterSchemas::new_node(isn->parent_schema, CODE_ISNT);
InterSchemas::new_node(isn->parent_schema, CODE_ISNT, t);
isn->child_node = code_isn;
code_isn->parent_node = isn;
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, t);
code_isn->child_node = new_isn;
new_isn->parent_node = code_isn;
@ -245,7 +245,7 @@ int Ramification::unbrace_schema(inter_schema_node *par, inter_schema_node *isn)
resumed = resumed->next;
if (resumed) {
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, t);
new_isn->expression_tokens = resumed;
new_isn->parent_node = isn->parent_node;
InterSchemas::changed_tokens_on(new_isn);
@ -296,7 +296,7 @@ int Ramification::divide_schema(inter_schema_node *par, inter_schema_node *isn)
if (t->ist_type == CLOSE_ROUND_ISTT) bl--;
if ((bl == 0) && (t->ist_type == DIVIDER_ISTT) && (t->next)) {
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, t);
new_isn->expression_tokens = t->next;
new_isn->parent_node = isn->parent_node;
if (isn->child_node) {
@ -398,7 +398,8 @@ int Ramification::resolve_halfopen_blocks(inter_schema_node *par, inter_schema_n
t->ist_type = WHITE_SPACE_ISTT;
t->material = I" ";
if (t->next) {
inter_schema_node *new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, t);
new_isn->expression_tokens = t->next;
new_isn->parent_node = isn->parent_node;
if (isn->child_node) {
@ -458,7 +459,7 @@ int Ramification::break_early_bracings(inter_schema_node *par, inter_schema_node
}
if ((m) && (n) && (n->ist_type == RESERVED_ISTT)) {
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, n);
new_isn->expression_tokens = n;
new_isn->parent_node = isn->parent_node;
if (isn->child_node) {
@ -555,12 +556,12 @@ int Ramification::split_switches_into_cases(inter_schema_node *par, inter_schema
inter_schema_node *sw_val = NULL;
inter_schema_node *sw_code = NULL;
if (defaulter) {
sw_code = InterSchemas::new_node(isn->parent_schema, CODE_ISNT);
sw_code = InterSchemas::new_node(isn->parent_schema, CODE_ISNT, n);
isn->child_node = sw_code;
sw_code->parent_node = isn;
} else {
sw_val = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
sw_code = InterSchemas::new_node(isn->parent_schema, CODE_ISNT);
sw_val = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, n);
sw_code = InterSchemas::new_node(isn->parent_schema, CODE_ISNT, n);
sw_val->next_node = sw_code;
sw_val->parent_node = isn; isn->child_node = sw_val;
sw_code->parent_node = isn;
@ -595,7 +596,7 @@ int Ramification::split_switches_into_cases(inter_schema_node *par, inter_schema
isn->isn_clarifier = CASE_BIP;
inter_schema_node *sw_code_exp =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, n);
sw_code_exp->expression_tokens = n->next;
sw_code->child_node = sw_code_exp;
@ -705,7 +706,7 @@ int Ramification::split_print_statements(inter_schema_node *par, inter_schema_no
if (n->reserved_word == PRINT_I6RW) n->material = I"print";
else n->material = I"print_ret";
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, n);
new_isn->expression_tokens = n;
new_isn->parent_node = isn->parent_node;
InterSchemas::changed_tokens_on(new_isn);
@ -983,13 +984,13 @@ turned into function calls too, leaving:
cons->expression_tokens = printing_rule;
inter_schema_token *open_b =
InterSchemas::new_token(OPEN_ROUND_ISTT, I"(", 0, 0, -1);
InterSchemas::new_token(OPEN_ROUND_ISTT, I"(", 0, 0, -1, printing_rule->line_offset);
InterSchemas::add_token_after(open_b, cons->expression_tokens);
open_b->next = n;
n = open_b;
while ((n) && (n->next)) n = n->next;
inter_schema_token *close_b =
InterSchemas::new_token(CLOSE_ROUND_ISTT, I")", 0, 0, -1);
InterSchemas::new_token(CLOSE_ROUND_ISTT, I")", 0, 0, -1, printing_rule->line_offset);
InterSchemas::add_token_after(close_b, n);
which_statement = 0;
operand1 = NULL;
@ -1002,17 +1003,17 @@ character, and one to return |true|.
inter_schema_node *save_next = cons->next_node;
cons->next_node =
InterSchemas::new_node(cons->parent_schema, STATEMENT_ISNT);
InterSchemas::new_node(cons->parent_schema, STATEMENT_ISNT, n);
cons->next_node->parent_node = cons->parent_node;
cons->next_node->isn_clarifier = PRINT_BIP;
cons->next_node->child_node =
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT, n);
cons->next_node->child_node->parent_node = cons->next_node;
InterSchemas::add_token_to_node(cons->next_node->child_node,
InterSchemas::new_token(DQUOTED_ISTT, I"\n", 0, 0, -1));
InterSchemas::new_token(DQUOTED_ISTT, I"\n", 0, 0, -1, 0));
cons->next_node->next_node =
InterSchemas::new_node(cons->parent_schema, STATEMENT_ISNT);
InterSchemas::new_node(cons->parent_schema, STATEMENT_ISNT, n);
cons->next_node->next_node->parent_node = cons->parent_node;
cons->next_node->next_node->isn_clarifier = RETURN_BIP;
@ -1048,7 +1049,7 @@ becomes
cons->dir_clarifier = InterSchemas::opening_directive_word(cons);
if (InterSchemas::second_dark_token(cons)) {
inter_schema_node *new_isn =
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT, first);
cons->child_node = new_isn;
new_isn->parent_node = cons;
new_isn->expression_tokens = InterSchemas::second_dark_token(cons);
@ -1075,7 +1076,7 @@ to be recognised for what they are.
if ((n) && (Str::eq(l->material, I")"))) continue;
if (l->ist_type != WHITE_SPACE_ISTT) {
inter_schema_node *new_isn =
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT, n);
new_isn->expression_tokens = l; l->next = NULL; l->owner = new_isn;
if (l->operation_primitive) {
l->ist_type = IDENTIFIER_ISTT;
@ -1123,7 +1124,7 @@ assembly instructions |@push| or |@pull| -- we do the following.
if (which_statement == STORE_BIP) @<The special case of giving an attribute@>;
@<Make the first child@> =
first_child = InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT);
first_child = InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT, first);
if (operand1 == NULL) operand1 = InterSchemas::second_dark_token(cons);
first_child->expression_tokens = operand1;
InterSchemas::changed_tokens_on(first_child);
@ -1140,11 +1141,13 @@ they cannot both apply.)
if (dangle_number >= 0) {
text_stream *T = Str::new();
WRITE_TO(T, "%d", dangle_number);
first_child->expression_tokens = InterSchemas::new_token(NUMBER_ISTT, T, 0, 0, -1);
first_child->expression_tokens =
InterSchemas::new_token(NUMBER_ISTT, T, 0, 0, -1, 0);
first_child->expression_tokens->owner = first_child;
}
if (Str::len(dangle_text) > 0) {
first_child->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, 0, 0, -1);
first_child->expression_tokens =
InterSchemas::new_token(DQUOTED_ISTT, dangle_text, 0, 0, -1, 0);
first_child->expression_tokens->owner = first_child;
}
@ -1153,7 +1156,7 @@ they cannot both apply.)
@<Make the second child@> =
if (operand2) {
inter_schema_node *second_child =
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(cons->parent_schema, EXPRESSION_ISNT, first);
if (which_statement == IFELSE_BIP) {
second_child->semicolon_terminated = TRUE;
second_child->next_node = first_child->next_node->next_node;
@ -1189,14 +1192,14 @@ But it is legal to do so in this schema, and that is what our expression node do
cons->child_node = NULL;
cons->expression_tokens = A->expression_tokens;
cons->expression_tokens->next =
InterSchemas::new_token(OPERATOR_ISTT, I".", PROPERTYVALUE_BIP, 0, -1);
InterSchemas::new_token(OPERATOR_ISTT, I".", PROPERTYVALUE_BIP, 0, -1, 0);
cons->expression_tokens->next->next = B->expression_tokens;
cons->expression_tokens->next->next->next =
InterSchemas::new_token(OPERATOR_ISTT, I"=", STORE_BIP, 0, -1);
InterSchemas::new_token(OPERATOR_ISTT, I"=", STORE_BIP, 0, -1, 0);
text_stream *T = Str::new();
WRITE_TO(T, "%d", dangle_number);
cons->expression_tokens->next->next->next->next =
InterSchemas::new_token(NUMBER_ISTT, T, 0, 0, -1);
InterSchemas::new_token(NUMBER_ISTT, T, 0, 0, -1, 0);
InterSchemas::changed_tokens_on(cons);
@h The break for statements ramification.
@ -1240,6 +1243,7 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
return FALSE;
}
inter_schema_token *n = predicates->expression_tokens;
inter_schema_token *near = n;
inter_schema_node *code_node = predicates->next_node;
int bl = 0, cw = 0;
inter_schema_token *from[3], *to[3];
@ -1267,7 +1271,8 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
return FALSE;
}
for (int i=0; i<3; i++) {
inter_schema_node *eval_isn = InterSchemas::new_node(isn->parent_schema, EVAL_ISNT);
inter_schema_node *eval_isn =
InterSchemas::new_node(isn->parent_schema, EVAL_ISNT, near);
if (i == 0) isn->child_node = eval_isn;
if (i == 1) isn->child_node->next_node = eval_isn;
if (i == 2) {
@ -1276,7 +1281,8 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
}
eval_isn->parent_node = isn;
inter_schema_node *expr_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
inter_schema_node *expr_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, near);
eval_isn->child_node = expr_isn;
expr_isn->parent_node = eval_isn;
@ -1334,7 +1340,8 @@ int Ramification::add_missing_bodies(inter_schema_node *par, inter_schema_node *
return FALSE;
}
if (actual == req-1) {
inter_schema_node *code_isn = InterSchemas::new_node(isn->parent_schema, CODE_ISNT);
inter_schema_node *code_isn =
InterSchemas::new_node_near_node(isn->parent_schema, CODE_ISNT, isn);
code_isn->parent_node = isn;
inter_schema_node *ch = isn->child_node;
@ -1415,7 +1422,7 @@ that |(x+1)| would now become:
=
@<This expression is entirely in a matching pair of round brackets@> =
inter_schema_node *sub_node = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
inter_schema_node *sub_node = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, from);
sub_node->expression_tokens = from;
for (inter_schema_token *l = sub_node->expression_tokens; l; l=l->next)
if (l->next == to)
@ -1472,7 +1479,7 @@ int Ramification::top_level_commas(inter_schema_node *par, inter_schema_node *is
prev = n; n = n->next;
while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) { prev = n; n = n->next; }
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, n);
new_isn->expression_tokens = n;
new_isn->parent_node = isn->parent_node;
InterSchemas::changed_tokens_on(new_isn);
@ -1503,7 +1510,8 @@ int Ramification::multiple_case_values(inter_schema_node *par, inter_schema_node
inter_schema_node *A = isn->child_node;
inter_schema_node *B = isn->child_node->next_node;
if ((A) && (B) && (B->next_node)) {
inter_schema_node *C = InterSchemas::new_node(isn->parent_schema, OPERATION_ISNT);
inter_schema_node *C =
InterSchemas::new_node_near_node(isn->parent_schema, OPERATION_ISNT, A);
C->isn_clarifier = ALTERNATIVECASE_BIP;
C->child_node = A;
A->parent_node = C; B->parent_node = C;
@ -1657,7 +1665,7 @@ Here the final operator is the |+|, and there are both left and right operands.
@<Make the left operand expression@> =
inter_schema_node *left_operand_node =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, from);
left_operand_node->expression_tokens = from;
for (inter_schema_token *l = left_operand_node->expression_tokens; l; l=l->next)
if (l->next == to)
@ -1669,7 +1677,7 @@ Here the final operator is the |+|, and there are both left and right operands.
@<Make the right operand expression@> =
inter_schema_node *right_operand_node =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, from);
right_operand_node->expression_tokens = from;
InterSchemas::changed_tokens_on(right_operand_node);
if (isn->child_node == NULL) {
@ -1803,7 +1811,7 @@ array lookup is performed to find the address of the function to call.
@<Relegate node@> =
if ((from) && (to) && (from != to)) {
inter_schema_node *new_isn =
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT, from);
new_isn->expression_tokens = from;
for (inter_schema_token *l = new_isn->expression_tokens; l; l=l->next)
if (l->next == to)
@ -1827,8 +1835,9 @@ int Ramification::implied_return_values(inter_schema_node *par, inter_schema_nod
for (inter_schema_node *prev = NULL; isn; prev = isn, isn = isn->next_node) {
if ((isn->isn_type == STATEMENT_ISNT) &&
(isn->isn_clarifier == RETURN_BIP) && (isn->child_node == FALSE)) {
inter_schema_node *one = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
one->expression_tokens = InterSchemas::new_token(NUMBER_ISTT, I"1", 0, 0, -1);
inter_schema_node *one =
InterSchemas::new_node_near_node(isn->parent_schema, EXPRESSION_ISNT, isn);
one->expression_tokens = InterSchemas::new_token(NUMBER_ISTT, I"1", 0, 0, -1, 0);
one->expression_tokens->owner = one;
isn->child_node = one;
one->parent_node = isn;

View file

@ -34,11 +34,13 @@ void Tokenisation::go(inter_schema *sch, text_stream *from, int pos, int abbrevi
inter_schema_token *preceding_token = NULL;
int definition_length = Str::len(from);
int line_offset = 0;
text_stream *current_raw = Str::new();
int tokeniser_state = NO_TOKSTATE;
for (; pos<definition_length; pos++) {
int c = Str::get_at(from, pos);
if (Characters::is_whitespace(c)) {
if (c == '\n') line_offset++;
if ((tokeniser_state == TOK_TOKSTATE) || (tokeniser_state == NO_TOKSTATE)) {
@<Absorb raw material, if any@>;
tokeniser_state = WHITE_TOKSTATE;
@ -117,17 +119,17 @@ void Tokenisation::go(inter_schema *sch, text_stream *from, int pos, int abbrevi
switch (tokeniser_state) {
case WHITE_TOKSTATE:
InterSchemas::add_token(sch,
InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", 0, 0, -1));
InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", 0, 0, -1, line_offset));
break;
case DQUOTED_TOKSTATE:
Tokenisation::de_escape_text(current_raw);
InterSchemas::add_token(sch,
InterSchemas::new_token(DQUOTED_ISTT, current_raw, 0, 0, -1));
InterSchemas::new_token(DQUOTED_ISTT, current_raw, 0, 0, -1, line_offset));
break;
case SQUOTED_TOKSTATE:
Tokenisation::de_escape_sq_text(current_raw);
InterSchemas::add_token(sch,
InterSchemas::new_token(SQUOTED_ISTT, current_raw, 0, 0, -1));
InterSchemas::new_token(SQUOTED_ISTT, current_raw, 0, 0, -1, line_offset));
break;
default:
@<Look for individual tokens@>;
@ -172,7 +174,7 @@ void Tokenisation::go(inter_schema *sch, text_stream *from, int pos, int abbrevi
@<Expand a fragment of Inform 7 text@> =
if (Str::len(source_text_fragment) > 0) {
InterSchemas::add_token(sch,
InterSchemas::new_token(I7_ISTT, source_text_fragment, 0, 0, -1));
InterSchemas::new_token(I7_ISTT, source_text_fragment, 0, 0, -1, line_offset));
}
@ Material in braces sometimes indicates an inline command, but not always,
@ -202,7 +204,7 @@ a "bracing".
a bracing.
@<Parse a bracing into an inline command@> =
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, bracing, 0, 0, -1);
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, bracing, 0, 0, -1, line_offset);
t->bracing = Str::duplicate(bracing);
t->command = Str::new();
t->operand = Str::new();
@ -434,7 +436,7 @@ of modifiers are allowed. See //calculus: Compilation Schemas//.
@<Absorb raw material, if any@>;
TEMPORARY_TEXT(T)
for (int i=pos; i<=at; i++) PUT_TO(T, Str::get_at(from, i));
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, T, 0, 0, -1);
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, T, 0, 0, -1, line_offset);
t->bracing = Str::duplicate(T);
t->inline_command = substitute_ISINC;
t->inline_modifiers = iss_bitmap;
@ -444,7 +446,7 @@ of modifiers are allowed. See //calculus: Compilation Schemas//.
DISCARD_TEXT(T)
pos = at;
} else if (c == '&') {
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, I"*&", 0, 0, -1);
inter_schema_token *t = InterSchemas::new_token(INLINE_ISTT, I"*&", 0, 0, -1, line_offset);
t->bracing = I"*&";
t->inline_command = combine_ISINC;
t->inline_modifiers = iss_bitmap;
@ -657,7 +659,7 @@ inclusive; we ignore an empty token.
int which_rw = 0, which_number = -1, which_quote = -1;
@<Identify this new token@>;
inter_schema_token *n = InterSchemas::new_token(is, T, which, which_rw, which_number);
inter_schema_token *n = InterSchemas::new_token(is, T, which, which_rw, which_number, line_offset);
#ifdef CORE_MODULE
if (which_quote >= 0) n->as_quoted = quoted_inames[which_quote];
#endif

View file

@ -165,7 +165,7 @@ and we do that in this module, using a data structure called an //inter_schema//
in effect, an annotated syntax tree -- to represent the results of parsing Inform 6
notation. For example, this:
= (text as InC)
inter_schema *sch = ParsingSchemas::from_text(I"return true;");
inter_schema *sch = ParsingSchemas::from_text(I"return true;", where);
EmitInterSchemas::emit(I, ..., sch, ...);
=
generates Inter code equivalent to the example above.[3] But the real power of

View file

@ -74,7 +74,8 @@ void Unit::test_harvester(text_stream *text, text_file_position *tfp, void *v_iu
@<Perform the schema test@> =
LOG("Test: parse schema from:\n%S\n", iut->test_input);
Str::trim_white_space(iut->test_input);
inter_schema *sch = ParsingSchemas::from_text(iut->test_input);
inter_schema *sch = ParsingSchemas::from_text(iut->test_input,
Provenance::at_file_and_line(I"hypothetical.txt", 1));
if (sch == NULL) LOG("<null schema>\n");
else if (sch->node_tree == NULL) LOG("<nodeless scheme\n");
else InterSchemas::log(DL, sch);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,77 @@
[Provenance::] Text Provenance.
Recording where fragments of text originally came from.
@ Inter code sometimes needs to contain fragments of not-yet-parsed Inform 6
syntax code, in the form of |SPLAT_IST| and |INSERT_IST| instructions. In order
for it to be possible to relate errors in those fragments to the original text
files they came from, we need to record their "provenance".
This is only a wrapper for saying something like "line 17 in |whatever.txt|".
Line numbers count from 1 at the top of a text file.
=
typedef struct text_provenance {
struct text_stream *textual_filename;
int line_number;
} text_provenance;
@ This provides a "don't know, or, it didn't come from a text file, I made it up"
value:
=
text_provenance Provenance::nowhere(void) {
text_provenance nowhere;
nowhere.textual_filename = NULL;
nowhere.line_number = 0;
return nowhere;
}
int Provenance::is_somewhere(text_provenance where) {
if (Str::len(where.textual_filename) > 0) return TRUE;
return FALSE;
}
@ Composing:
=
text_provenance Provenance::at_file_and_line(text_stream *file, int line) {
text_provenance somewhere;
somewhere.textual_filename = Str::duplicate(file);
somewhere.line_number = line;
return somewhere;
}
@ Decomposing:
=
int Provenance::get_line(text_provenance where) {
if (Provenance::is_somewhere(where)) return where.line_number;
return 0;
}
filename *Provenance::get_filename(text_provenance where) {
if (Provenance::is_somewhere(where))
return Filenames::from_text(where.textual_filename);
return NULL;
}
@ Altering in place:
=
void Provenance::set_line(text_provenance *where, int lc) {
if ((where) && (Provenance::is_somewhere(*where)))
where->line_number = lc;
}
@ Writing to text:
=
void Provenance::write(OUTPUT_STREAM, text_provenance at) {
if (Provenance::is_somewhere(at)) {
TextualInter::write_text(OUT, at.textual_filename);
WRITE(" %d", at.line_number);
} else {
WRITE("<nowhere>");
}
}

View file

@ -112,8 +112,7 @@ void InsertInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_nod
WRITE(" ");
TextualInter::write_text(OUT, replacing);
WRITE(" ");
TextualInter::write_text(OUT, InsertInstruction::file_provenance(P));
WRITE(" %d", InsertInstruction::line_provenance(P));
Provenance::write(OUT, InsertInstruction::provenance(P));
}
@h Access functions.
@ -131,14 +130,10 @@ text_stream *InsertInstruction::replacing(inter_tree_node *P) {
return Inode::ID_to_text(P, P->W.instruction[REPLACING_INSERT_IFLD]);
}
text_stream *InsertInstruction::file_provenance(inter_tree_node *P) {
if (P == NULL) return NULL;
if (Inode::isnt(P, INSERT_IST)) return NULL;
return Inode::ID_to_text(P, P->W.instruction[PROVENANCEFILE_INSERT_IFLD]);
}
inter_ti InsertInstruction::line_provenance(inter_tree_node *P) {
if (P == NULL) return 0;
if (Inode::isnt(P, INSERT_IST)) return 0;
return P->W.instruction[PROVENANCELINE_INSERT_IFLD];
text_provenance InsertInstruction::provenance(inter_tree_node *P) {
if (P == NULL) return Provenance::nowhere();
if (Inode::isnt(P, INSERT_IST)) return Provenance::nowhere();
return Provenance::at_file_and_line(
Inode::ID_to_text(P, P->W.instruction[PROVENANCEFILE_INSERT_IFLD]),
(int) P->W.instruction[PROVENANCELINE_INSERT_IFLD]);
}

View file

@ -157,16 +157,12 @@ text_stream *SplatInstruction::namespace(inter_tree_node *P) {
return Inode::ID_to_text(P, P->W.instruction[NAMESPACE_SPLAT_IFLD]);
}
text_stream *SplatInstruction::file_provenance(inter_tree_node *P) {
if (P == NULL) return NULL;
if (Inode::isnt(P, SPLAT_IST)) return NULL;
return Inode::ID_to_text(P, P->W.instruction[PROVENANCEFILE_SPLAT_IFLD]);
}
inter_ti SplatInstruction::line_provenance(inter_tree_node *P) {
if (P == NULL) return 0;
if (Inode::isnt(P, SPLAT_IST)) return 0;
return P->W.instruction[PROVENANCELINE_SPLAT_IFLD];
text_provenance SplatInstruction::provenance(inter_tree_node *P) {
if (P == NULL) return Provenance::nowhere();
if (Inode::isnt(P, SPLAT_IST)) return Provenance::nowhere();
return Provenance::at_file_and_line(
Inode::ID_to_text(P, P->W.instruction[PROVENANCEFILE_SPLAT_IFLD]),
(int) P->W.instruction[PROVENANCELINE_SPLAT_IFLD]);
}
@h PLMs.

View file

@ -34,6 +34,7 @@ Chapter 3: Their Instructions
Inter Data Types
Metadata
Inter Errors
Text Provenance
Chapter 4: Void Constructs
The Comment Construct

View file

@ -139,26 +139,40 @@ power tools just lying around, people will eventually pick them up and wonder
what the red button marked "danger" does.
=
text_provenance kit_error_location;
int kit_error_location_set = FALSE;
int kit_error_count = 0;
text_stream *kit_error_filename = NULL;
int kit_error_line_number = 0;
void PipelineErrors::set_kit_error_location(text_stream *file, inter_ti line) {
kit_error_filename = file;
kit_error_line_number = (int) line;
text_provenance PipelineErrors::get_kit_error_location(void) {
if (kit_error_location_set == FALSE)
PipelineErrors::clear_kit_error_location();
return kit_error_location;
}
void PipelineErrors::clear_kit_error_location(void) {
PipelineErrors::set_kit_error_location(Provenance::nowhere());
}
void PipelineErrors::set_kit_error_location(text_provenance where) {
kit_error_location_set = TRUE;
kit_error_location = where;
}
void PipelineErrors::set_kit_error_location_near_splat(inter_tree_node *P) {
PipelineErrors::clear_kit_error_location();
if ((P) && (Inode::is(P, SPLAT_IST)))
PipelineErrors::set_kit_error_location(SplatInstruction::provenance(P));
}
void PipelineErrors::kit_error(char *message, text_stream *quote) {
text_provenance at = PipelineErrors::get_kit_error_location();
#ifdef CORE_MODULE
SourceProblems::I6_level_error(message, quote, kit_error_filename,
kit_error_line_number);
SourceProblems::I6_level_error(message, quote, at);
#endif
#ifndef CORE_MODULE
if (Str::len(kit_error_filename) > 0) {
filename *F = Filenames::from_text(kit_error_filename);
if (Provenance::is_somewhere(at)) {
filename *F = Provenance::get_filename(at);
TEMPORARY_TEXT(M)
WRITE_TO(M, message, quote);
Errors::at_position_S(M, F, kit_error_line_number);
Errors::at_position_S(M, F, Provenance::get_line(at));
DISCARD_TEXT(M)
} else {
Errors::with_text(message, quote);
@ -168,6 +182,7 @@ void PipelineErrors::kit_error(char *message, text_stream *quote) {
}
void PipelineErrors::reset_errors(void) {
PipelineErrors::clear_kit_error_location();
kit_error_count = 0;
}

View file

@ -31,17 +31,16 @@ void CompileSplatsStage::create_pipeline_stage(void) {
=
int CompileSplatsStage::run(pipeline_step *step) {
PipelineErrors::reset_errors();
PipelineErrors::set_kit_error_location(NULL, 0);
compile_splats_state css;
@<Initialise the CS state@>;
inter_tree *I = step->ephemera.tree;
InterTree::traverse(I, CompileSplatsStage::visitor1, &css, NULL, SPLAT_IST);
InterTree::traverse(I, CompileSplatsStage::visitor2, &css, NULL, 0);
PipelineErrors::set_kit_error_location(NULL, 0);
PipelineErrors::clear_kit_error_location();
int errors_found = CompileSplatsStage::function_bodies(step, &css, I);
if (errors_found) return FALSE;
InterTree::traverse(I, CompileSplatsStage::visitor3, &css, NULL, SPLAT_IST);
PipelineErrors::set_kit_error_location(NULL, 0);
PipelineErrors::clear_kit_error_location();
if (PipelineErrors::errors_occurred()) return FALSE;
return TRUE;
}
@ -137,11 +136,7 @@ void CompileSplatsStage::visitor3(inter_tree *I, inter_tree_node *P, void *state
@h How definitions are assimilated.
@<Assimilate definition@> =
if (SplatInstruction::line_provenance(P) > 0)
PipelineErrors::set_kit_error_location(
SplatInstruction::file_provenance(P), SplatInstruction::line_provenance(P));
else
PipelineErrors::set_kit_error_location(NULL, 0);
PipelineErrors::set_kit_error_location_near_splat(P);
match_results mr = Regexp::create_mr();
text_stream *raw_identifier = NULL, *value = NULL;
int proceed = TRUE;
@ -710,11 +705,7 @@ We are concerned more with the surround than with the contents of the function
in this section.
@<Assimilate routine@> =
if (SplatInstruction::line_provenance(P) > 0)
PipelineErrors::set_kit_error_location(
SplatInstruction::file_provenance(P), SplatInstruction::line_provenance(P));
else
PipelineErrors::set_kit_error_location(NULL, 0);
PipelineErrors::set_kit_error_location_near_splat(P);
text_stream *raw_identifier = NULL, *local_var_names = NULL, *body = NULL;
match_results mr = Regexp::create_mr();
if (SplatInstruction::plm(P) == ROUTINE_PLM) @<Parse the routine header@>;
@ -852,7 +843,7 @@ These have package types |_function| and |_code| respectively.
Str::truncate(body, L);
inter_ti B = (inter_ti) InterBookmark::baseline(IBM) + 1;
CompileSplatsStage::function_body(css, IBM, IP, B, body, block_bookmark, identifier,
SplatInstruction::namespace(P));
SplatInstruction::namespace(P), PipelineErrors::get_kit_error_location());
@h Inform 6 annotations.
@ -1180,7 +1171,8 @@ answer. Since we recurse depth-first, the subsidiary results are always made
before they are needed.
@<Parse this as a possibly computed value@> =
inter_schema *sch = ParsingSchemas::from_text(S);
inter_schema *sch =
ParsingSchemas::from_text(S, PipelineErrors::get_kit_error_location());
int excess_tokens = FALSE;
inter_symbol *result_s =
CompileSplatsStage::compute_r(step, IBM, sch->node_tree, &excess_tokens);
@ -1352,12 +1344,13 @@ typedef struct function_body_request {
struct text_stream *body;
struct text_stream *identifier;
struct text_stream *namespace;
struct text_provenance provenance;
CLASS_DEFINITION
} function_body_request;
int CompileSplatsStage::function_body(compile_splats_state *css, inter_bookmark *IBM,
inter_package *block_package, inter_ti offset, text_stream *body, inter_bookmark bb,
text_stream *identifier, text_stream *namespace) {
text_stream *identifier, text_stream *namespace, text_provenance provenance) {
if (Str::is_whitespace(body)) return FALSE;
function_body_request *req = CREATE(function_body_request);
req->block_bookmark = bb;
@ -1368,6 +1361,7 @@ int CompileSplatsStage::function_body(compile_splats_state *css, inter_bookmark
req->body = Str::duplicate(body);
req->identifier = Str::duplicate(identifier);
req->namespace = Str::duplicate(namespace);
req->provenance = provenance;
ADD_TO_LINKED_LIST(req, function_body_request, css->function_bodies_to_compile);
return TRUE;
}
@ -1384,7 +1378,7 @@ int CompileSplatsStage::function_bodies(pipeline_step *step, compile_splats_stat
LOOP_OVER_LINKED_LIST(req, function_body_request, css->function_bodies_to_compile) {
LOGIF(SCHEMA_COMPILATION, "=======\n\nFunction (%S) len %d: '%S'\n\n",
InterPackage::name(req->block_package), Str::len(req->body), req->body);
inter_schema *sch = ParsingSchemas::from_text(req->body);
inter_schema *sch = ParsingSchemas::from_text(req->body, req->provenance);
if (LinkedLists::len(sch->parsing_errors) > 0) {
CompileSplatsStage::report_kit_errors(sch, req);
} else {
@ -1423,10 +1417,12 @@ void CompileSplatsStage::report_kit_errors(inter_schema *sch, function_body_requ
if (LinkedLists::len(sch->parsing_errors) > 0) {
schema_parsing_error *err;
LOOP_OVER_LINKED_LIST(err, schema_parsing_error, sch->parsing_errors) {
PipelineErrors::set_kit_error_location(err->provenance);
TEMPORARY_TEXT(msg)
WRITE_TO(msg, "in function '%S': %S", req->identifier, err->message);
PipelineErrors::kit_error("inform 6 syntax error %S", msg);
PipelineErrors::kit_error("Inform 6 syntax error %S", msg);
DISCARD_TEXT(msg)
}
PipelineErrors::clear_kit_error_location();
}
}

View file

@ -94,8 +94,7 @@ void ParsingStages::visit_insertions(inter_tree *I, inter_tree_node *P, void *st
inter_bookmark here = InterBookmark::after_this_node(P);
rpi_docket_state *docket_state = (rpi_docket_state *) docket->state;
docket_state->assimilation_point = &here;
docket_state->file_provenance = InsertInstruction::file_provenance(P);
docket_state->line_provenance = InsertInstruction::line_provenance(P);
docket_state->provenance = InsertInstruction::provenance(P);
SimpleTangler::tangle_text(docket, insertion);
text_stream *replacing = InsertInstruction::replacing(P);
if (Str::len(replacing) > 0) {
@ -121,8 +120,7 @@ in |K/Sections|.
typedef struct rpi_docket_state {
struct inter_bookmark *assimilation_point;
struct text_stream *namespace;
struct text_stream *file_provenance;
inter_ti line_provenance;
struct text_provenance provenance;
} rpi_docket_state;
@<Make a suitable simple tangler docket@> =
@ -134,8 +132,7 @@ typedef struct rpi_docket_state {
rpi_docket_state state;
state.assimilation_point = &assimilation_point;
state.namespace = namespacename;
state.file_provenance = NULL;
state.line_provenance = 0;
state.provenance = Provenance::nowhere();
docket = SimpleTangler::new_docket(
&(ParsingStages::receive_raw),
&(ParsingStages::receive_command),
@ -233,6 +230,7 @@ and
@d COMMENTED_I6TBIT 8
@d ROUTINED_I6TBIT 16
@d CONTENT_ON_LINE_I6TBIT 32
@d NOTE_LINES_I6TBIT 64
@d SUBORDINATE_I6TBITS
(COMMENTED_I6TBIT + SQUOTED_I6TBIT + DQUOTED_I6TBIT + ROUTINED_I6TBIT)
@ -240,9 +238,9 @@ and
=
void ParsingStages::receive_raw(text_stream *S, simple_tangle_docket *docket) {
text_stream *R = Str::new();
int mode = IGNORE_WS_I6TBIT;
int mode = IGNORE_WS_I6TBIT + NOTE_LINES_I6TBIT;
rpi_docket_state *state = (rpi_docket_state *) docket->state;
inter_ti lc = state->line_provenance;
int lc = Provenance::get_line(state->provenance);
for (int pos = 0; pos < Str::len(S); pos++) {
wchar_t c = Str::get_at(S, pos);
if ((c == 10) || (c == 13)) { c = '\n'; lc++; }
@ -257,16 +255,18 @@ void ParsingStages::receive_raw(text_stream *S, simple_tangle_docket *docket) {
if (in_number) PUT_TO(number_text, c);
else PUT_TO(file_text, c);
}
state->line_provenance = (inter_ti) Str::atoi(number_text, 0);
lc = state->line_provenance;
state->file_provenance = file_text;
LOG("Spotted %d and <%S>\n", state->line_provenance, state->file_provenance);
lc = Str::atoi(number_text, 0);
state->provenance = Provenance::at_file_and_line(file_text, lc);
DISCARD_TEXT(number_text)
continue;
}
if (mode & IGNORE_WS_I6TBIT) {
if ((c == '\n') || (Characters::is_whitespace(c))) continue;
mode -= IGNORE_WS_I6TBIT;
if (mode & NOTE_LINES_I6TBIT) {
mode -= NOTE_LINES_I6TBIT;
Provenance::set_line(&(state->provenance), lc);
}
}
if ((c == '!') && (!(mode & (DQUOTED_I6TBIT + SQUOTED_I6TBIT)))) {
mode = mode | COMMENTED_I6TBIT;
@ -303,12 +303,12 @@ void ParsingStages::receive_raw(text_stream *S, simple_tangle_docket *docket) {
PUT_TO(R, c);
if ((c == ';') && (!(mode & SUBORDINATE_I6TBITS))) {
ParsingStages::splat(R, docket);
state->line_provenance = lc;
mode = IGNORE_WS_I6TBIT;
Provenance::set_line(&(state->provenance), lc);
mode = IGNORE_WS_I6TBIT + NOTE_LINES_I6TBIT;
}
}
ParsingStages::splat(R, docket);
state->line_provenance = lc;
Provenance::set_line(&(state->provenance), lc);
Str::clear(S);
}
@ -332,12 +332,9 @@ void ParsingStages::splat(text_stream *R, simple_tangle_docket *docket) {
PUT_TO(R, '\n');
filename *F = NULL;
inter_ti lc = 0;
if (Str::len(state->file_provenance) > 0) {
F = Filenames::from_text(state->file_provenance);
lc = state->line_provenance + 1;
} else if (docket->current_filename) {
F = docket->current_filename;
lc = 25;
if (Provenance::is_somewhere(state->provenance)) {
F = Provenance::get_filename(state->provenance);
lc = (inter_ti) Provenance::get_line(state->provenance);
}
Produce::guard(SplatInstruction::new(IBM, R, I6_dir, A, state->namespace,
F, lc, (inter_ti) (InterBookmark::baseline(IBM) + 1), NULL));