1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-20 18:08:40 +03:00

Implemented IE-0006

This commit is contained in:
Graham Nelson 2022-10-09 23:26:03 +01:00
parent af06fb4f3d
commit 839aec2a7f
85 changed files with 1449 additions and 354 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.2.0-beta+6V79 'Krypton' (5 October 2022)
[Version](notes/versioning.md): 10.2.0-beta+6V80 'Krypton' (9 October 2022)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 5 October 2022
Build Number: 6V79
Build Date: 9 October 2022
Build Number: 6V80

View file

@ -192,6 +192,10 @@ prior to now, are all met.
matches something in the current subject list.
</p>
<p class="commentary">A two-word array is used as a sort of temporary live subject list in order
to test relevance to a single subject.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorBeatRelevant</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</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">DirectorBeatRelevantTo</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">DialogueTopicPool</span><span class="plain-syntax">);</span>
@ -209,6 +213,11 @@ matches something in the current subject list.
<span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">beatdata</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">RELEVANCE_DBMETADATA</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fn</span><span class="plain-syntax">) (</span><span class="identifier-syntax">fn</span><span class="plain-syntax">)(</span><span class="identifier-syntax">DialogueTopicPool</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">);</span>
<span class="plain-syntax">];</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorBeatAbout</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">subject</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">subject</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">DirectorBeatRelevantTo</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">DirectorMiniPool</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. Performing beats. </b>Note that calls to <span class="extract"><span class="extract-syntax">DirectorPerformBeat</span></span> can be nested, and even with the same beat.
This is why <span class="extract"><span class="extract-syntax">DirectorBeatBeingPerformed</span></span> is careful to avoid the possibility of

View file

@ -136,23 +136,14 @@ If <span class="extract"><span class="extract-syntax">speaker</span></span> is n
first to speak. (Note that <span class="extract"><span class="extract-syntax">speaker</span></span> will often be the player.)
</p>
<p class="commentary">A two-word array is used as a sort of temporary live subject list in order
to test relevance for these purposes.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorIntervenes</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">speaker</span><span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">obj</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorIntervenes</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">speaker</span><span class="plain-syntax"> </span><span class="identifier-syntax">fn</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">speaker</span><span class="plain-syntax"> ~= </span><span class="reserved-syntax">nothing</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">db</span><span class="plain-syntax">=1: </span><span class="identifier-syntax">db</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">NO_DIALOGUE_BEATS</span><span class="plain-syntax">: </span><span class="identifier-syntax">db</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatFirstSpeaker</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">) == </span><span class="identifier-syntax">speaker</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">DirectorBeatAccessible</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">player</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAvailable</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatRelevantTo</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAbout</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorPerformBeat</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -160,8 +151,7 @@ to test relevance for these purposes.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatFirstSpeaker</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">) ~= </span><span class="identifier-syntax">speaker</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">DirectorBeatAccessible</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">player</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAvailable</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatRelevantTo</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAbout</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorPerformBeat</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -169,13 +159,11 @@ to test relevance for these purposes.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">db</span><span class="plain-syntax">=1: </span><span class="identifier-syntax">db</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">NO_DIALOGUE_BEATS</span><span class="plain-syntax">: </span><span class="identifier-syntax">db</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">DirectorBeatAccessible</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">player</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAvailable</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatRelevantTo</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">DirectorBeatAbout</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorPerformBeat</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DirectorMiniPool</span><span class="plain-syntax">--&gt;0 = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>

View file

@ -152,6 +152,19 @@ whether the choice <span class="extract"><span class="extract-syntax">dc</span><
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DirectorBeatOpeningLine</span><span class="plain-syntax"> </span><span class="identifier-syntax">db</span><span class="plain-syntax"> </span><span class="identifier-syntax">program</span><span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">db</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">db</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">NO_DIALOGUE_BEATS</span><span class="plain-syntax">)) </span><span class="string-syntax">"*** no beat ***"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">program</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DirectorBeatGetProgram</span><span class="plain-syntax">(</span><span class="identifier-syntax">db</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pc</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">instruction</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">program</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">pc</span><span class="plain-syntax">)/100;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">instruction</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> == </span><span class="identifier-syntax">LINE_DCODEI</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">program</span><span class="plain-syntax">--&gt;(</span><span class="identifier-syntax">pc</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pc</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">program</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">pc</span><span class="plain-syntax">)/100;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="string-syntax">"*** no line ***"</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. Disassembly. </b>Purely for debugging purposes:
</p>

View file

@ -72,6 +72,8 @@
<span class="definition-keyword">enum</span> <span class="constant-syntax">inter_schema_node_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">inter_schema_token_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">schema_parsing_error_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">I6_annotation_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">I6_annotation_term_CLASS</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">hierarchy_location</span><span class="plain-syntax">)</span>
@ -87,6 +89,8 @@
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_name</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_name_generator</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="constant-syntax">100</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="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_iname</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_name</span><span class="plain-syntax">)</span>

View file

@ -1113,7 +1113,7 @@ like the comma in C) to throw away the results of the non-final evaluations.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-eis.html#SP3_1">&#167;3.1</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-i6o.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresscurrent">eis</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-if.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-i6o.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresscurrent">eis</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-if.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -0,0 +1,257 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Inform 6 Annotations</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 'Inform 6 Annotations' 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">building</a></li><li><a href="index.html#2">Chapter 2: Blueprints</a></li><li><b>Inform 6 Annotations</b></li></ul></div>
<p class="purpose">Parsing Inform 6-syntax annotation markers.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Annotations are parsed into the following:
</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">I6_annotation</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">terms</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">I6_annotation_term</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</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">I6_annotation</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation_term</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">key</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">value</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">I6_annotation_term</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure I6_annotation is accessed in 2/is, 2/rmf, 2/eis and here.</li><li>The structure I6_annotation_term is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="function-syntax">I6Annotations::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">I6Annotations::new</span></span>:<br/><a href="2-i6a.html#SP4">&#167;4</a>, <a href="2-i6a.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</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">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</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">IA</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">IA</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>Purely syntactic parsing is done with two calls. To see these exercised, try
the <span class="extract"><span class="extract-syntax">building-test</span></span> test case <span class="extract"><span class="extract-syntax">annotations</span></span>.
</p>
<p class="commentary"><span class="extract"><span class="extract-syntax">I6Annotations::check</span></span> returns a character position <span class="extract"><span class="extract-syntax">i</span></span> (counting from 0 at
the start of the text) if it can find a syntactically valid set of annotations
before <span class="extract"><span class="extract-syntax">i</span></span>. Note that this can be the empty set. We return -1 if a purported
annotation appears (i.e., because the first non-whitespace character is <span class="extract"><span class="extract-syntax">+</span></span>)
but what follows is not syntactically valid according to the rules in IE-0006.
</p>
<p class="commentary">Note that we only check syntax, not semantics: all kinds of unknown annotations
would pass this, provided they were properly punctuated.
</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">I6Annotations::check</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</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-i6a.html#SP5" class="function-link"><span class="function-syntax">I6Annotations::unpack</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b><span class="extract"><span class="extract-syntax">I6Annotations::parse(A)</span></span> parses a complete annotation, including its opening
<span class="extract"><span class="extract-syntax">+</span></span> sign but with no junk at the end, into an <span class="extract"><span class="extract-syntax">I6_annotation</span></span>. It returns <span class="extract"><span class="extract-syntax">NULL</span></span>
if a syntax error is reached.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="function-syntax">I6Annotations::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><a href="2-i6a.html#SP2" class="function-link"><span class="function-syntax">I6Annotations::new</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-i6a.html#SP5" class="function-link"><span class="function-syntax">I6Annotations::unpack</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) == -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">IA</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>Both use the same simple finite-state-machine parser.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NONPLUSSED_I6ASTATE</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> waiting for the </span><span class="extract"><span class="extract-syntax">+</span></span><span class="comment-syntax"> sign</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BEFORE_I6ASTATE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> after the </span><span class="extract"><span class="extract-syntax">+</span></span><span class="comment-syntax"> sign, waiting for the identifier</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">NAME_I6ASTATE</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> inside the identifier</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">AFTER_I6ASTATE</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> after the identifier, waiting for another </span><span class="extract"><span class="extract-syntax">+</span></span><span class="comment-syntax"> or bracketed data</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">QUOTED_I6ASTATE</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> inside quoted matter</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">I6Annotations::unpack</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">I6Annotations::unpack</span></span>:<br/><a href="2-i6a.html#SP3">&#167;3</a>, <a href="2-i6a.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">A</span><span class="plain-syntax">, </span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_tail</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">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">NONPLUSSED_I6ASTATE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">name_length</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">A</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">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">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">BEFORE_I6ASTATE</span><span class="plain-syntax">) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">NAME_I6ASTATE</span><span class="plain-syntax">) </span><span class="identifier-syntax">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">AFTER_I6ASTATE</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">'+'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONPLUSSED_I6ASTATE</span><span class="plain-syntax">) </span><span class="identifier-syntax">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">BEFORE_I6ASTATE</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">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">BEFORE_I6ASTATE</span><span class="plain-syntax">) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IA</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><a href="2-i6a.html#SP2" class="function-link"><span class="function-syntax">I6Annotations::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IA</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="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">BEFORE_I6ASTATE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">name_length</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="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">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">state</span><span class="plain-syntax"> != </span><span class="constant-syntax">NAME_I6ASTATE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> != </span><span class="constant-syntax">AFTER_I6ASTATE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">malformed</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">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">AFTER_I6ASTATE</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">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</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">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">QUOTED_I6ASTATE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> == </span><span class="character-syntax">'\\'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">++; </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> == </span><span class="character-syntax">'\''</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">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">n</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> != </span><span class="character-syntax">','</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> != </span><span class="character-syntax">')'</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">malformed</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">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">AFTER_I6ASTATE</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</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="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">d</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> == </span><span class="character-syntax">'\''</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">-1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> != </span><span class="character-syntax">','</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> != </span><span class="character-syntax">'('</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">malformed</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">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">QUOTED_I6ASTATE</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</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">d</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</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">d</span><span class="plain-syntax"> == </span><span class="character-syntax">')'</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">1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">d</span><span class="plain-syntax"> == </span><span class="character-syntax">','</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="2-i6a.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Parse term</span><span class="named-paragraph-number">5.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">d</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">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="named-paragraph-container code-font"><a href="2-i6a.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Parse term</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</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">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">QUOTED_I6ASTATE</span><span class="plain-syntax">) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONPLUSSED_I6ASTATE</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">AFTER_I6ASTATE</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">state</span><span class="plain-syntax"> = </span><span class="constant-syntax">NAME_I6ASTATE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">name_length</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">c</span><span class="plain-syntax"> != </span><span class="character-syntax">'_'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Characters::isalpha</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="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">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">malformed</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">IA</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">malformed</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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">allow_tail</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">allow_tail</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">state</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONPLUSSED_I6ASTATE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse term</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="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">term</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">K</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">V</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IA</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax"> *</span><span class="identifier-syntax">term</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">I6_annotation_term</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">term</span><span class="plain-syntax">, </span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">key</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</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">k</span><span class="plain-syntax">=0, </span><span class="identifier-syntax">in_key</span><span class="plain-syntax">=</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">k</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">); </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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">in_key</span><span 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">K</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">in_key</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">in_key</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">in_key</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">V</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">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span 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">K</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">); </span><span class="identifier-syntax">k</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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">Characters::isalpha</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="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">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">malformed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-i6a.html#SP5">&#167;5</a> (twice).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-if.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresscurrent">i6a</li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="3-prd.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -254,7 +254,7 @@ irrelevant, of course, for unary operators.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-rmf.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresscurrent">i6o</li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-eis.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-rmf.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresscurrent">i6o</li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-eis.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -170,7 +170,7 @@ because the symbol which that iname incarnates as must be the right one.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-eis.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresscurrent">if</li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="3-prd.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-eis.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresscurrent">if</li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6a.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -316,7 +316,7 @@ compilation process, and never survive into the final schema:
<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>
<ul class="endnotetexts"><li>The structure inter_schema_token is accessed in 2/tkn, 2/rmf, 2/eis, 2/if and here.</li></ul>
<ul class="endnotetexts"><li>The structure inter_schema_token is accessed in 2/tkn, 2/rmf, 2/eis, 2/if, 2/i6a and here.</li></ul>
<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">
@ -757,7 +757,7 @@ which, of course, it usually isn't.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-in.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="progresscurrentchapter">2</li><li class="progresscurrent">is</li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-pis.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="1-in.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="progresscurrentchapter">2</li><li class="progresscurrent">is</li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-pis.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -252,7 +252,7 @@ such operations are nested, they will work. We might then write:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-is.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresscurrent">pis</li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-tkn.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-is.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresscurrent">pis</li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-tkn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -2178,7 +2178,7 @@ to cause trouble later. If no error is thrown, the schema is unchanged.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-tkn.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresscurrent">rmf</li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6o.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-tkn.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresscurrent">rmf</li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6o.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1487,7 +1487,7 @@ single quotation mark in a dictionary literal, but not a character literal.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-tkn.html#SP4_2">&#167;4.2</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-pis.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresscurrent">tkn</li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-rmf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-pis.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresscurrent">tkn</li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-rmf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -736,7 +736,7 @@ doesn't add the name tp the current stack frame in <a href="../inform7/index.htm
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-if.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-is.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">prd</li><li class="progresssection"><a href="3-vh.html">vh</a></li><li class="progressnext"><a href="3-vh.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="2-i6a.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-is.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">prd</li><li class="progresssection"><a href="3-vh.html">vh</a></li><li class="progressnext"><a href="3-vh.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -145,6 +145,11 @@
<spon class="sectiontitle">Identifier Finders</span></a> -
<span class="sectionpurpose">Suppose we have an identifier name, say BlkValueCreate, which we think refers to some symbol in an Inter tree. Where do we look for it?</span></p>
</li>
<li>
<p class="sectionentry"><a href="2-i6a.html">
<spon class="sectiontitle">Inform 6 Annotations</span></a> -
<span class="sectionpurpose">Parsing Inform 6-syntax annotation markers.</span></p>
</li>
</ul>
</li>
<li>

View file

@ -40,8 +40,8 @@
</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/docs/index.html">inweb</a></li>
<li><a href="../../../intest/docs/index.html">intest</a></li>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
@ -69,33 +69,33 @@
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">main</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> **</span><span class="identifier-syntax">argv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/1-fm.html#SP8" class="function-link"><span class="function-syntax">Foundation::start</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/1-fm.html#SP8" class="function-link"><span class="function-syntax">Foundation::start</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../words-module/1-wm.html#SP3" class="function-link"><span class="function-syntax">WordsModule::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../building-module/1-bm2.html#SP3" class="function-link"><span class="function-syntax">BuildingModule::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../bytecode-module/1-bm.html#SP3" class="function-link"><span class="function-syntax">BytecodeModule::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-cla.html#SP14" class="function-link"><span class="function-syntax">CommandLine::declare_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"building-test: a tool for testing the building module\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP14" class="function-link"><span class="function-syntax">CommandLine::declare_heading</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"building-test: a tool for testing the building module\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TEST_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"test"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TEST_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"test"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"perform unit tests from file X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-cla.html#SP8" class="function-link"><span class="function-syntax">CommandLine::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><a href="1-pc.html#SP3" class="function-link"><span class="function-syntax">Main::respond</span></a><span class="plain-syntax">, &amp;</span><a href="1-pc.html#SP3" class="function-link"><span class="function-syntax">Main::ignore</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP8" class="function-link"><span class="function-syntax">CommandLine::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><a href="1-pc.html#SP3" class="function-link"><span class="function-syntax">Main::respond</span></a><span class="plain-syntax">, &amp;</span><a href="1-pc.html#SP3" class="function-link"><span class="function-syntax">Main::ignore</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../words-module/1-wm.html#SP3" class="function-link"><span class="function-syntax">WordsModule::end</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../building-module/1-bm2.html#SP5" class="function-link"><span class="function-syntax">BuildingModule::end</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../bytecode-module/1-bm.html#SP3" class="function-link"><span class="function-syntax">BytecodeModule::end</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/1-fm.html#SP9" class="function-link"><span class="function-syntax">Foundation::end</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/1-fm.html#SP9" class="function-link"><span class="function-syntax">Foundation::end</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="constant-syntax">0</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">Main::respond</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_CLSW:</span><span class="plain-syntax"> </span><a href="1-ut.html#SP1" class="function-link"><span class="function-syntax">Unit::run</span></a><span class="plain-syntax">(</span><a href="../../../inweb/docs/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_CLSW:</span><span class="plain-syntax"> </span><a href="1-ut.html#SP1" class="function-link"><span class="function-syntax">Unit::run</span></a><span class="plain-syntax">(</span><a href="../../../inweb/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Main::ignore</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal</span></a><span class="plain-syntax">(</span><span class="string-syntax">"only switches may be used at the command line"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal</span></a><span class="plain-syntax">(</span><span class="string-syntax">"only switches may be used at the command line"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -48,8 +48,8 @@ function togglePopup(material_id) {
</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/docs/index.html">inweb</a></li>
<li><a href="../../../intest/docs/index.html">intest</a></li>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
@ -66,15 +66,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">dummy</span><span class="plain-syntax"> = </span><a href="../bytecode-module/2-it.html#SP2" class="function-link"><span class="function-syntax">InterTree::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = </span><a href="../bytecode-module/2-bkm.html#SP4" class="function-link"><span class="function-syntax">InterBookmark::at_start_of_this_repository</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dummy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../building-module/1-ip.html#SP14" class="function-link"><span class="function-syntax">Primitives::declare_standard_set</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dummy</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/2-str.html#SP20" class="function-link"><span class="function-syntax">Streams::enable_debugging</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/2-str.html#SP20" class="function-link"><span class="function-syntax">Streams::enable_debugging</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">FORMER_DL</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DL</span><span class="plain-syntax"> = </span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_unit_test</span><span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">.</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_IUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">.</span><span class="element-syntax">test_input</span><span class="plain-syntax"> = </span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read tests file"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">.</span><span class="element-syntax">test_input</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read tests file"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="1-ut.html#SP2" class="function-link"><span class="function-syntax">Unit::test_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">iut</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/2-str.html#SP20" class="function-link"><span class="function-syntax">Streams::disable_debugging</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/2-str.html#SP20" class="function-link"><span class="function-syntax">Streams::disable_debugging</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DL</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FORMER_DL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -83,6 +83,7 @@ function togglePopup(material_id) {
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_IUT</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SCHEMA_IUT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SCHEMA_WORKINGS_IUT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">I6_ANNOTATION_IUT</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_unit_test</span><span class="plain-syntax"> {</span>
@ -92,29 +93,35 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Unit::test_harvester</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">Unit::test_harvester</span></span>:<br/><a href="1-ut.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_iut</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_unit_test</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iut</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inter_unit_test</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_iut</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"schema"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"schema"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="constant-syntax">SCHEMA_IUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"schema-workings"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"schema-workings"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="constant-syntax">SCHEMA_WORKINGS_IUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"end"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"annotation"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="constant-syntax">I6_ANNOTATION_IUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"end"</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">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</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">SCHEMA_WORKINGS_IUT:</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/2-dl.html#SP7" class="function-link"><span class="function-syntax">Log::set_aspect</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/2-dl.html#SP7" class="function-link"><span class="function-syntax">Log::set_aspect</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-ut.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Perform the schema test</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/2-dl.html#SP7" class="function-link"><span class="function-syntax">Log::set_aspect</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/2-dl.html#SP7" class="function-link"><span class="function-syntax">Log::set_aspect</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</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">SCHEMA_IUT:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-ut.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Perform the schema test</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unimplemented test"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</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">I6_ANNOTATION_IUT:</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-ut.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Perform the annotation test</span><span class="named-paragraph-number">2.2</span></a></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><a href="../../../inweb/foundation-module/3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unimplemented test"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> = </span><span class="constant-syntax">NO_IUT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iut</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">to_perform</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_IUT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"content outside of test"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../../../inweb/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"content outside of test"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</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_TO</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="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -127,7 +134,7 @@ 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/docs/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><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">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>
@ -135,6 +142,37 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"=========\n"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-ut.html#SP2">&#167;2</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform the annotation test</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Test: parse annotation 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><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> = </span><a href="../building-module/2-i6a.html#SP3" class="function-link"><span class="function-syntax">I6Annotations::check</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Malformed\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="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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;</span><span class="identifier-syntax">verdict</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">A</span><span class="plain-syntax">, </span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</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="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><a href="../building-module/2-i6a.html#SP4" class="function-link"><span class="function-syntax">I6Annotations::parse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">); </span><span class="identifier-syntax">IA</span><span class="plain-syntax">; </span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IA</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Annotation: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax"> *</span><span class="identifier-syntax">term</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="reserved-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</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">"%d: %S = &lt;%S&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">++, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> &lt; </span><a href="../../../inweb/foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</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="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Residue: "</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">verdict</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;Str::len(iut-&gt;</span><span class="element-syntax">test_input</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%c"</span><span class="plain-syntax">, </span><a href="../../../inweb/foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_at</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="identifier-syntax">i</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">A</span><span class="plain-syntax">)</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"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-ut.html#SP2">&#167;2</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-pc.html">&#10094;</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-pc.html">pc</a></li><li class="progresscurrent">ut</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->

View file

@ -38,8 +38,8 @@
</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/docs/index.html">inweb</a></li>
<li><a href="../../../intest/docs/index.html">intest</a></li>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
@ -91,7 +91,7 @@
</li>
<li>
<p class="moduleentry">
<a href="../../../inweb/docs/foundation-module/index.html"><spon class="sectiontitle">inweb/foundation</span></a>
<a href="../../../inweb/foundation-module/index.html"><spon class="sectiontitle">inweb/foundation</span></a>
- <span class="sectionpurpose">A library of utility functions for command-line tools.</span></p>
</li>
</ul>

View file

@ -158,7 +158,7 @@ which use this module:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'3'</span><span class="plain-syntax">, </span><a href="2-sym.html#SP21" class="function-link"><span class="function-syntax">InterSymbol::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'3'</span><span class="plain-syntax">, </span><a href="2-sym.html#SP22" class="function-link"><span class="function-syntax">InterSymbol::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'4'</span><span class="plain-syntax">, </span><a href="2-st.html#SP22" class="function-link"><span class="function-syntax">InterSymbolsTable::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'5'</span><span class="plain-syntax">, </span><a href="2-bkm.html#SP8" class="function-link"><span class="function-syntax">InterBookmark::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'6'</span><span class="plain-syntax">, </span><a href="2-pck.html#SP19" class="function-link"><span class="function-syntax">InterPackage::log</span></a><span class="plain-syntax">);</span>

View file

@ -110,12 +110,18 @@ Inform 10.1.0.
This renumbers the binary representation of types, so it is a major not minor bump.
</p>
<p class="commentary">3.0.0 (9 October 2022) added a new optional field to <span class="extract"><span class="extract-syntax">SPLAT_IST</span></span> instructions,
which holds I6 annotations in the sense of Inform evolution proposal IE-0006.
Note that these are not Inter annotations, which apply to symbols: these apply
to directives.
</p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Anyway, the implementation, such as it is:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="function-syntax">InterVersion::current</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">InterVersion::current</span></span>:<br/><a href="1-tiv.html#SP4">&#167;4</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP9_1_1">&#167;9.1.1</a><br/>The Version Construct - <a href="6-tvc.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="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"2.0.0"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">semantic_version_number</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VersionNumbers::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"3.0.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">VersionNumbers::is_null</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"malformed version 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="identifier-syntax">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -126,12 +126,14 @@ read in which had used an inconsistent set of annotations.
<span class="definition-keyword">enum</span> <span class="constant-syntax">ASSIMILATED_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">FAKE_ACTION_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">OBJECT_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PRIVATE_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_ARRAY_ADDRESS_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">I6_GLOBAL_OFFSET_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">OBJECT_KIND_COUNTER_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">APPEND_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INNER_PROPERTY_NAME_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TRANSLATION_IANN</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">REPLACING_IANN</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The special annotation <span class="extract"><span class="extract-syntax">__invalid</span></span>, with ID <span class="extract"><span class="extract-syntax">INVALID_IANN</span></span>, is never given to
any symbol: it's used to mean "do not make an annotation".
@ -144,10 +146,12 @@ any symbol: it's used to mean "do not make an annotation".
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__assimilated"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">FAKE_ACTION_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__fake_action"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OBJECT_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__object"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRIVATE_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__private"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOLEAN_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">APPEND_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__append"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXTUAL_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INNER_PROPERTY_NAME_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__inner_property_name"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXTUAL_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TRANSLATION_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__translation"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXTUAL_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">REPLACING_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__replacing"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXTUAL_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">C_ARRAY_ADDRESS_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__array_address"</span><span class="plain-syntax">, </span><span class="constant-syntax">INTEGER_IATYPE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">SymbolAnnotation::declare</span></a><span class="plain-syntax">(</span><span class="constant-syntax">I6_GLOBAL_OFFSET_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__global_offset"</span><span class="plain-syntax">, </span><span class="constant-syntax">INTEGER_IATYPE</span><span class="plain-syntax">);</span>
@ -189,7 +193,7 @@ any symbol: it's used to mean "do not make an annotation".
<span class="plain-syntax"> </span><a href="2-ann.html#SP6" class="function-link"><span class="function-syntax">SymbolAnnotation::set</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INTEGER_IATYPE</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</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">SymbolAnnotation::set_t</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">SymbolAnnotation::set_t</span></span>:<br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</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">SymbolAnnotation::set_t</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">SymbolAnnotation::set_t</span></span>:<br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a>, <a href="2-sym.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</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="identifier-syntax">annot_ID</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::create_text</span></a><span class="plain-syntax">(</span><a href="2-it.html#SP3" class="function-link"><span class="function-syntax">InterTree::warehouse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::get_text</span></a><span class="plain-syntax">(</span><a href="2-it.html#SP3" class="function-link"><span class="function-syntax">InterTree::warehouse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">n</span><span class="plain-syntax">), </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
@ -222,7 +226,7 @@ is <span class="extract"><span class="extract-syntax">FALSE</span></span>, where
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">SymbolAnnotation::get_t</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">SymbolAnnotation::get_t</span></span>:<br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">ID</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">SymbolAnnotation::get_t</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">SymbolAnnotation::get_t</span></span>:<br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a>, <a href="2-sym.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">ID</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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="identifier-syntax">val</span><span class="plain-syntax"> = </span><a href="2-ann.html#SP12" class="function-link"><span class="function-syntax">SymbolAnnotation::read_from_set</span></a><span class="plain-syntax">(</span><span class="constant-syntax">TEXTUAL_IATYPE</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">annotations</span><span class="plain-syntax">), </span><span class="identifier-syntax">ID</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">found</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">found</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::get_text</span></a><span class="plain-syntax">(</span><a href="2-it.html#SP3" class="function-link"><span class="function-syntax">InterTree::warehouse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>

View file

@ -190,7 +190,7 @@ call those creator functions, not these.
<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">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inode::new_with_2_data_fields</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">Inode::new_with_2_data_fields</span></span>:<br/>Transmigration - <a href="2-trn.html#SP4_1_1">&#167;4.1.1</a><br/>The Insert Construct - <a href="4-tic.html#SP2">&#167;2</a><br/>The Pragma Construct - <a href="4-tpc4.html#SP2">&#167;2</a><br/>The Primitive Construct - <a href="4-tpc5.html#SP2">&#167;2</a><br/>The Cast Construct - <a href="5-tcc.html#SP2">&#167;2</a><br/>The Inv Construct - <a href="5-tic.html#SP3">&#167;3</a><br/>The Local Construct - <a href="5-tlc3.html#SP2">&#167;2</a><br/>The Splat Construct - <a href="5-tsc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inode::new_with_2_data_fields</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">Inode::new_with_2_data_fields</span></span>:<br/>Transmigration - <a href="2-trn.html#SP4_1_1">&#167;4.1.1</a><br/>The Insert Construct - <a href="4-tic.html#SP2">&#167;2</a><br/>The Pragma Construct - <a href="4-tpc4.html#SP2">&#167;2</a><br/>The Primitive Construct - <a href="4-tpc5.html#SP2">&#167;2</a><br/>The Cast Construct - <a href="5-tcc.html#SP2">&#167;2</a><br/>The Inv Construct - <a href="5-tic.html#SP3">&#167;3</a><br/>The Local Construct - <a href="5-tlc3.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">V1</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">V2</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="2-bkm.html#SP7" class="function-link"><span class="function-syntax">InterBookmark::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">);</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><a href="2-in.html#SP2" class="function-link"><span class="function-syntax">Inode::new_node</span></a><span class="plain-syntax">(</span><a href="2-it.html#SP3" class="function-link"><span class="function-syntax">InterTree::warehouse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">,</span>
@ -202,7 +202,7 @@ call those creator functions, not these.
<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">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inode::new_with_3_data_fields</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">Inode::new_with_3_data_fields</span></span>:<br/>The Constant Construct - <a href="4-tcc2.html#SP4">&#167;4</a><br/>The Permission Construct - <a href="4-tpc3.html#SP2">&#167;2</a><br/>The Property Construct - <a href="4-tpc6.html#SP2">&#167;2</a><br/>The Ref Construct - <a href="5-trc.html#SP2">&#167;2</a><br/>The Val Construct - <a href="5-tvc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inode::new_with_3_data_fields</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">Inode::new_with_3_data_fields</span></span>:<br/>The Constant Construct - <a href="4-tcc2.html#SP4">&#167;4</a><br/>The Permission Construct - <a href="4-tpc3.html#SP2">&#167;2</a><br/>The Property Construct - <a href="4-tpc6.html#SP2">&#167;2</a><br/>The Ref Construct - <a href="5-trc.html#SP2">&#167;2</a><br/>The Splat Construct - <a href="5-tsc.html#SP2">&#167;2</a><br/>The Val Construct - <a href="5-tvc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">V1</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">V2</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">V3</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="2-bkm.html#SP7" class="function-link"><span class="function-syntax">InterBookmark::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">);</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><a href="2-in.html#SP2" class="function-link"><span class="function-syntax">Inode::new_node</span></a><span class="plain-syntax">(</span><a href="2-it.html#SP3" class="function-link"><span class="function-syntax">InterTree::warehouse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">,</span>

View file

@ -155,7 +155,7 @@ outermost box, that is, the top level of the hierarchy.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">InterPackage::tree</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">InterPackage::tree</span></span>:<br/>Bookmarks - <a href="2-bkm.html#SP5">&#167;5</a><br/>The Warehouse - <a href="2-tw.html#SP5">&#167;5</a><br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Transmigration - <a href="2-trn.html#SP3_1">&#167;3.1</a>, <a href="2-trn.html#SP4_2_2">&#167;4.2.2</a><br/>Inter in Text Files - <a href="3-iitf.html#SP5_1">&#167;5.1</a>, <a href="3-iitf.html#SP7_1">&#167;7.1</a><br/>Inter Value Pairs - <a href="3-ivp.html#SP13">&#167;13</a><br/>Inter Data Types - <a href="3-idt.html#SP17_11">&#167;17.11</a><br/>Metadata - <a href="3-mtd.html#SP6_1">&#167;6.1</a><br/>The Package Construct - <a href="4-tpc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">InterPackage::tree</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">InterPackage::tree</span></span>:<br/>Bookmarks - <a href="2-bkm.html#SP5">&#167;5</a><br/>The Warehouse - <a href="2-tw.html#SP5">&#167;5</a><br/>Symbols - <a href="2-sym.html#SP20">&#167;20</a>, <a href="2-sym.html#SP21">&#167;21</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Transmigration - <a href="2-trn.html#SP3_1">&#167;3.1</a>, <a href="2-trn.html#SP4_2_2">&#167;4.2.2</a><br/>Inter in Text Files - <a href="3-iitf.html#SP5_1">&#167;5.1</a>, <a href="3-iitf.html#SP7_1">&#167;7.1</a><br/>Inter Value Pairs - <a href="3-ivp.html#SP13">&#167;13</a><br/>Inter Data Types - <a href="3-idt.html#SP17_11">&#167;17.11</a><br/>Metadata - <a href="3-mtd.html#SP6_1">&#167;6.1</a><br/>The Package Construct - <a href="4-tpc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -603,7 +603,7 @@ for packages as a special case of URLs for symbols.
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_URL_SYMBOL_NAME_DEPTH</span><span class="plain-syntax"> </span><span class="constant-syntax">512</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">InterSymbolsTable::write_symbol_URL</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">InterSymbolsTable::write_symbol_URL</span></span>:<br/>Symbols - <a href="2-sym.html#SP21">&#167;21</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Inter in Text Files - <a href="3-iitf.html#SP5_2">&#167;5.2</a>, <a href="3-iitf.html#SP10">&#167;10</a><br/>Verifying Inter - <a href="3-vi.html#SP2">&#167;2</a><br/>Inter Data Types - <a href="3-idt.html#SP19">&#167;19</a><br/>The Plug Construct - <a href="6-tpc.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</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">InterSymbolsTable::write_symbol_URL</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">InterSymbolsTable::write_symbol_URL</span></span>:<br/>Symbols - <a href="2-sym.html#SP22">&#167;22</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Inter in Text Files - <a href="3-iitf.html#SP5_2">&#167;5.2</a>, <a href="3-iitf.html#SP10">&#167;10</a><br/>Verifying Inter - <a href="3-vi.html#SP2">&#167;2</a><br/>Inter Data Types - <a href="3-idt.html#SP19">&#167;19</a><br/>The Plug Construct - <a href="6-tpc.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chain</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_URL_SYMBOL_NAME_DEPTH</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">chain_length</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_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="2-st.html#SP3" class="function-link"><span class="function-syntax">InterSymbolsTable::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">);</span>

View file

@ -59,7 +59,7 @@ function togglePopup(material_id) {
<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#2">Chapter 2: The Trees</a></li><li><b>Symbols</b></li></ul></div>
<p class="purpose">To manage named symbols in inter code.</p>
<ul class="toc"><li><a href="2-sym.html#SP1">&#167;1. Creation</a></li><li><a href="2-sym.html#SP5">&#167;5. Status</a></li><li><a href="2-sym.html#SP9">&#167;9. Various sorts of symbol</a></li><li><a href="2-sym.html#SP15">&#167;15. Definition of a symbol</a></li><li><a href="2-sym.html#SP19">&#167;19. Identifier name</a></li><li><a href="2-sym.html#SP20">&#167;20. Translation</a></li><li><a href="2-sym.html#SP21">&#167;21. Logging</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="2-sym.html#SP1">&#167;1. Creation</a></li><li><a href="2-sym.html#SP5">&#167;5. Status</a></li><li><a href="2-sym.html#SP9">&#167;9. Various sorts of symbol</a></li><li><a href="2-sym.html#SP15">&#167;15. Definition of a symbol</a></li><li><a href="2-sym.html#SP19">&#167;19. Identifier name</a></li><li><a href="2-sym.html#SP20">&#167;20. Translation</a></li><li><a href="2-sym.html#SP21">&#167;21. Replacement</a></li><li><a href="2-sym.html#SP22">&#167;22. Logging</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Creation. </b>Each symbol belongs to exactly one symbols table, and thus to exactly one
package; its ID is unique within that table, and therefore package.
@ -148,7 +148,7 @@ metadata symbol: in practice that means if its name begins with <span class="ext
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbol::package</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">InterSymbol::package</span></span>:<br/><a href="2-sym.html#SP20">&#167;20</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Transmigration - <a href="2-trn.html#SP4_2_2">&#167;4.2.2</a><br/>The Package Construct - <a href="4-tpc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbol::package</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">InterSymbol::package</span></span>:<br/><a href="2-sym.html#SP20">&#167;20</a>, <a href="2-sym.html#SP21">&#167;21</a><br/>The Wiring - <a href="2-tw2.html#SP12">&#167;12</a><br/>Transmigration - <a href="2-trn.html#SP4_2_2">&#167;4.2.2</a><br/>The Package Construct - <a href="4-tpc.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-st.html#SP3" class="function-link"><span class="function-syntax">InterSymbolsTable::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -276,7 +276,7 @@ as constants, cannot be wired, and are never compiled. See <a href="3-mtd.html"
</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">InterSymbol::is_metadata_key</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">InterSymbol::is_metadata_key</span></span>:<br/><a href="2-sym.html#SP14">&#167;14</a>, <a href="2-sym.html#SP20">&#167;20</a><br/>The Wiring - <a href="2-tw2.html#SP5">&#167;5</a>, <a href="2-tw2.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbol::is_metadata_key</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">InterSymbol::is_metadata_key</span></span>:<br/><a href="2-sym.html#SP14">&#167;14</a>, <a href="2-sym.html#SP20">&#167;20</a>, <a href="2-sym.html#SP21">&#167;21</a><br/>The Wiring - <a href="2-tw2.html#SP5">&#167;5</a>, <a href="2-tw2.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-sym.html#SP6" class="function-link"><span class="function-syntax">InterSymbol::get_flag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">METADATA_KEY_ISYMF</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -514,7 +514,7 @@ annotation <span class="extract"><span class="extract-syntax">_translation</span
<span class="plain-syntax"> </span><a href="2-sym.html#SP3" class="function-link"><span class="function-syntax">InterSymbol::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">TRANSLATION_IANN</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">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbol::get_translate</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">InterSymbol::get_translate</span></span>:<br/><a href="2-sym.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbol::get_translate</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">InterSymbol::get_translate</span></span>:<br/><a href="2-sym.html#SP22">&#167;22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no symbol"</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-ann.html#SP7" class="function-link"><span class="function-syntax">SymbolAnnotation::get_t</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP4" class="function-link"><span class="function-syntax">InterPackage::tree</span></a><span class="plain-syntax">(</span><a href="2-sym.html#SP3" class="function-link"><span class="function-syntax">InterSymbol::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)), </span><span class="constant-syntax">TRANSLATION_IANN</span><span class="plain-syntax">);</span>
@ -526,7 +526,23 @@ annotation <span class="extract"><span class="extract-syntax">_translation</span
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-sym.html#SP19" class="function-link"><span class="function-syntax">InterSymbol::identifier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Logging. </b></p>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Replacement. </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">InterSymbol::set_replacement</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no symbol"</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-sym.html#SP10" class="function-link"><span class="function-syntax">InterSymbol::is_metadata_key</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</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-ann.html#SP6" class="function-link"><span class="function-syntax">SymbolAnnotation::set_t</span></a><span class="plain-syntax">(</span><a href="2-pck.html#SP4" class="function-link"><span class="function-syntax">InterPackage::tree</span></a><span class="plain-syntax">(</span><a href="2-sym.html#SP3" class="function-link"><span class="function-syntax">InterSymbol::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP3" class="function-link"><span class="function-syntax">InterSymbol::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">REPLACING_IANN</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">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbol::get_replacement</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no symbol"</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-ann.html#SP7" class="function-link"><span class="function-syntax">SymbolAnnotation::get_t</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP4" class="function-link"><span class="function-syntax">InterPackage::tree</span></a><span class="plain-syntax">(</span><a href="2-sym.html#SP3" class="function-link"><span class="function-syntax">InterSymbol::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)), </span><span class="constant-syntax">REPLACING_IANN</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. Logging. </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">InterSymbol::log</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">InterSymbol::log</span></span>:<br/>Bytecode Module - <a href="1-bm.html#SP3_6">&#167;3.6</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">vs</span><span class="plain-syntax">) {</span>

View file

@ -67,8 +67,8 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::define_construct</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">SplatInstruction::define_construct</span></span>:<br/>Inter Constructs - <a href="3-ic.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_construct</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IC</span><span class="plain-syntax"> = </span><a href="3-ic.html#SP1" class="function-link"><span class="function-syntax">InterInstruction::create_construct</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"splat"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP8" class="function-link"><span class="function-syntax">InterInstruction::specify_syntax</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"splat OPTIONALIDENTIFIER TEXT"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP4" class="function-link"><span class="function-syntax">InterInstruction::data_extent_always</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP8" class="function-link"><span class="function-syntax">InterInstruction::specify_syntax</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"splat OPTIONALIDENTIFIER TEXT TEXT"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP4" class="function-link"><span class="function-syntax">InterInstruction::data_extent_always</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP3" class="function-link"><span class="function-syntax">InterInstruction::allow_in_depth_range</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFINITELY_DEEP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP3" class="function-link"><span class="function-syntax">InterInstruction::permit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="constant-syntax">OUTSIDE_OF_PACKAGES_ICUP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP3" class="function-link"><span class="function-syntax">InterInstruction::permit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="constant-syntax">INSIDE_PLAIN_PACKAGE_ICUP</span><span class="plain-syntax">);</span>
@ -83,15 +83,18 @@ function togglePopup(material_id) {
compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a> &mdash; followed by:
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MATTER_SPLAT_IFLD</span><span class="plain-syntax"> (</span><span class="constant-syntax">DATA_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PLM_SPLAT_IFLD</span><span class="plain-syntax"> (</span><span class="constant-syntax">DATA_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MATTER_SPLAT_IFLD</span><span class="plain-syntax"> (</span><span class="constant-syntax">DATA_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PLM_SPLAT_IFLD</span><span class="plain-syntax"> (</span><span class="constant-syntax">DATA_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">I6ANNOTATION_SPLAT_IFLD</span><span class="plain-syntax"> (</span><span class="constant-syntax">DATA_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">)</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_error_message</span><span class="plain-syntax"> *</span><span class="function-syntax">SplatInstruction::new</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">SplatInstruction::new</span></span>:<br/><a href="5-tsc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">splatter</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="identifier-syntax">plm</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">) {</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><a href="2-in.html#SP5" class="function-link"><span class="function-syntax">Inode::new_with_2_data_fields</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> /* </span><span class="identifier-syntax">MATTER_SPLAT_IFLD:</span><span class="plain-syntax"> */ </span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::create_text_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">splatter</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> /* </span><span class="identifier-syntax">PLM_SPLAT_IFLD:</span><span class="plain-syntax"> */ </span><span class="identifier-syntax">plm</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="identifier-syntax">plm</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">annotation</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">level</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">) {</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><a href="2-in.html#SP5" class="function-link"><span class="function-syntax">Inode::new_with_3_data_fields</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="constant-syntax">SPLAT_IST</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> /* </span><span class="identifier-syntax">MATTER_SPLAT_IFLD:</span><span class="plain-syntax"> */ </span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::create_text_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">splatter</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> /* </span><span class="identifier-syntax">PLM_SPLAT_IFLD:</span><span class="plain-syntax"> */ </span><span class="identifier-syntax">plm</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> I6ANNOTATION_SPLAT_IFLD:</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">annotation</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)?(</span><a href="2-tw.html#SP7" class="function-link"><span class="function-syntax">InterWarehouse::create_text_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">annotation</span><span class="plain-syntax">)):0,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="identifier-syntax">level</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_error_message</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="3-vi.html#SP1" class="function-link"><span class="function-syntax">VerifyingInter::instruction</span></a><span class="plain-syntax">(</span><a href="2-bkm.html#SP6" class="function-link"><span class="function-syntax">InterBookmark::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</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">E</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
@ -116,6 +119,10 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="2-in.html#SP15" class="function-link"><span class="function-syntax">Inode::error</span></a><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">"plm out of range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="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">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">instruction</span><span class="plain-syntax">[</span><span class="constant-syntax">I6ANNOTATION_SPLAT_IFLD</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="3-vi.html#SP7" class="function-link"><span class="function-syntax">VerifyingInter::text_field</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="constant-syntax">I6ANNOTATION_SPLAT_IFLD</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">E</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Creating from textual Inter syntax. </b></p>
@ -124,7 +131,8 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::read</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">SplatInstruction::read</span></span>:<br/><a href="5-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_construct</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="reserved-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="reserved-syntax">inter_line_parse</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ilp</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_message</span><span class="plain-syntax"> **</span><span class="identifier-syntax">E</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">plm_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">splatter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">annot_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">splatter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">plm</span><span class="plain-syntax"> = </span><a href="5-tsc.html#SP8" class="function-link"><span class="function-syntax">SplatInstruction::parse_plm</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plm_text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-tsc.html#SP7" class="function-link"><span class="function-syntax">SplatInstruction::plm_valid</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plm</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
@ -132,9 +140,14 @@ 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>
<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">raw</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">raw_annot</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="3-iitf.html#SP11" class="function-link"><span class="function-syntax">TextualInter::parse_literal_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">raw</span><span class="plain-syntax">, </span><span class="identifier-syntax">splatter_text</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">splatter_text</span><span class="plain-syntax">), </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">E</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">E</span><span class="plain-syntax"> = </span><a href="5-tsc.html#SP2" class="function-link"><span class="function-syntax">SplatInstruction::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">raw</span><span class="plain-syntax">, </span><span class="identifier-syntax">plm</span><span class="plain-syntax">, (</span><span class="constant-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">indent_level</span><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">E</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">E</span><span class="plain-syntax"> = </span><a href="3-iitf.html#SP11" class="function-link"><span class="function-syntax">TextualInter::parse_literal_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">raw_annot</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot_text</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">annot_text</span><span class="plain-syntax">), </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">E</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">E</span><span class="plain-syntax"> = </span><a href="5-tsc.html#SP2" class="function-link"><span class="function-syntax">SplatInstruction::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">raw</span><span class="plain-syntax">, </span><span class="identifier-syntax">plm</span><span class="plain-syntax">, </span><span class="identifier-syntax">raw_annot</span><span class="plain-syntax">, (</span><span class="constant-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">ilp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">indent_level</span><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">raw</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
@ -144,6 +157,8 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::write</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">SplatInstruction::write</span></span>:<br/><a href="5-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_construct</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IC</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"splat "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-tsc.html#SP8" class="function-link"><span class="function-syntax">SplatInstruction::write_plm</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="5-tsc.html#SP6" class="function-link"><span class="function-syntax">SplatInstruction::plm</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-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="5-tsc.html#SP6" class="function-link"><span class="function-syntax">SplatInstruction::I6_annotation</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">" "</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="5-tsc.html#SP6" class="function-link"><span class="function-syntax">SplatInstruction::splatter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
@ -161,6 +176,12 @@ compulsory words &mdash; see <a href="2-in.html" class="internal">Inter Nodes</a
<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">MATTER_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::I6_annotation</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">SplatInstruction::I6_annotation</span></span>:<br/><a href="5-tsc.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">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">I6ANNOTATION_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;
perhaps "parse linked matter"? &mdash; so it is now a nonsense-word pronounced
@ -193,7 +214,7 @@ The other names here are taken from their corresponding I6 directives.
<span class="definition-keyword">enum</span> <span class="constant-syntax">WHITESPACE_PLM</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::plm_valid</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">SplatInstruction::plm_valid</span></span>:<br/><a href="5-tsc.html#SP3">&#167;3</a>, <a href="5-tsc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">plm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::plm_valid</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">SplatInstruction::plm_valid</span></span>:<br/><a href="5-tsc.html#SP3">&#167;3</a>, <a href="5-tsc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">plm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">plm</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">plm</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">WHITESPACE_PLM</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -204,7 +225,7 @@ written.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::parse_plm</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">SplatInstruction::parse_plm</span></span>:<br/><a href="5-tsc.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">S</span><span class="plain-syntax">) {</span>
<span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::parse_plm</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">SplatInstruction::parse_plm</span></span>:<br/><a href="5-tsc.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">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</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="constant-syntax">MYSTERY_PLM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ARRAY"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">ARRAY_PLM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ATTRIBUTE"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">ATTRIBUTE_PLM</span><span class="plain-syntax">;</span>
@ -226,7 +247,7 @@ written.
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::write_plm</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">SplatInstruction::write_plm</span></span>:<br/><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="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">plm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SplatInstruction::write_plm</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">SplatInstruction::write_plm</span></span>:<br/><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="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">plm</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">plm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ARRAY_PLM:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"ARRAY "</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">ATTRIBUTE_PLM:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"ATTRIBUTE "</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -182,7 +182,7 @@ number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3118 excerpt meanings</span>
<span class="plain-syntax"> Stored among 844 words out of total vocabulary of 10646</span>
<span class="plain-syntax"> Stored among 844 words out of total vocabulary of 10663</span>
<span class="plain-syntax"> 714 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax"> 15 words have an end list: longest belongs to case (with 6 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>

View file

@ -140,7 +140,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::error_with</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">PipelineErrors::error_with</span></span>:<br/>Running Pipelines - <a href="2-rp.html#SP3_1_1">&#167;3.1.1</a><br/>Read, Move, Stop Stages - <a href="2-rmss.html#SP3">&#167;3</a><br/>Load Binary Kits Stage - <a href="4-lbks.html#SP3_2_1_2">&#167;3.2.1.2</a><br/>Shorten Wiring Stage - <a href="4-sws.html#SP2_1">&#167;2.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="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">erm</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::error_with</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">PipelineErrors::error_with</span></span>:<br/>Running Pipelines - <a href="2-rp.html#SP3_1_1">&#167;3.1.1</a><br/>Read, Move, Stop Stages - <a href="2-rmss.html#SP3">&#167;3</a><br/>Load Binary Kits Stage - <a href="4-lbks.html#SP3_2_1_3">&#167;3.2.1.3</a><br/>Shorten Wiring Stage - <a href="4-sws.html#SP2_1">&#167;2.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="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">erm</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quoted</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="named-paragraph-container code-font"><a href="2-pe.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Begin problem message using the module of the same name</span><span class="named-paragraph-number">2.1</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">full</span><span class="plain-syntax">)</span>
@ -216,7 +216,7 @@ what the red button marked "danger" does.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pipeline_error_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::kit_error</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::kit_error</span></span>:<br/>Parsing Stages - <a href="3-ps.html#SP2_3">&#167;2.3</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">&#167;3.1.3.1.4.5.2</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_1">&#167;3.1.3.1.4.5.2.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#SP6_8">&#167;6.8</a>, <a href="3-css.html#SP6_10">&#167;6.10</a>, <a href="3-css.html#SP13">&#167;13</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::kit_error</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::kit_error</span></span>:<br/>Parsing Stages - <a href="3-ps.html#SP2_3">&#167;2.3</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">&#167;3.1.3.1.4.5.2</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_1">&#167;3.1.3.1.4.5.2.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#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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROBLEMS_MODULE</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>

View file

@ -335,7 +335,7 @@ move, add or remove some of these symbols.
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_RPSYM</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">RunningPipelines::get_symbol</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">RunningPipelines::get_symbol</span></span>:<br/><a href="2-rp.html#SP6">&#167;6</a><br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_1_1">&#167;3.1.3.1.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1_1">&#167;3.1.3.1.4.5.3.1.1</a>, <a href="3-css.html#SP3_2_3_1">&#167;3.2.3.1</a>, <a href="3-css.html#SP3_2_3_2">&#167;3.2.3.2</a>, <a href="3-css.html#SP5">&#167;5</a><br/>Kinds - <a href="5-knd.html#SP1_13">&#167;1.13</a>, <a href="5-knd.html#SP2">&#167;2</a><br/>Eliminate Redundant Matter Stage - <a href="6-erms.html#SP2">&#167;2</a>, <a href="6-erms.html#SP3_3">&#167;3.3</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">RunningPipelines::get_symbol</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">RunningPipelines::get_symbol</span></span>:<br/><a href="2-rp.html#SP6">&#167;6</a><br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_1_1">&#167;3.1.3.1.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1_1">&#167;3.1.3.1.4.5.3.1.1</a>, <a href="3-css.html#SP3_2_3_1">&#167;3.2.3.1</a>, <a href="3-css.html#SP3_2_3_2">&#167;3.2.3.2</a>, <a href="3-css.html#SP6">&#167;6</a><br/>Kinds - <a href="5-knd.html#SP1_13">&#167;1.13</a>, <a href="5-knd.html#SP2">&#167;2</a><br/>Eliminate Redundant Matter Stage - <a href="6-erms.html#SP2">&#167;2</a>, <a href="6-erms.html#SP3_3">&#167;3.3</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">id</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">id</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">MAX_RPSYM</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad ID"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">step</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no step"</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>
@ -437,7 +437,7 @@ linked in.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">RunningPipelines::ensure_symbol</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">RunningPipelines::ensure_symbol</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_4_5_3">&#167;3.1.3.1.4.5.3</a>, <a href="3-css.html#SP6_8">&#167;6.8</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">RunningPipelines::ensure_symbol</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">RunningPipelines::ensure_symbol</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_4_5_3">&#167;3.1.3.1.4.5.3</a>, <a href="3-css.html#SP7_8">&#167;7.8</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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="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">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-rp.html#SP5" class="function-link"><span class="function-syntax">RunningPipelines::get_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>

View file

@ -73,7 +73,7 @@ MathJax = {
<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">pipeline</a></li><li><a href="index.html#3">Chapter 3: Assimilation</a></li><li><b>Compile Splats Stage</b></li></ul></div>
<p class="purpose">To replace each splat node with a sequence of pure Inter nodes having the same meaning, thus purging the tree of all raw I6 syntax entirely.</p>
<ul class="toc"><li><a href="3-css.html#SP1">&#167;1. Basic idea</a></li><li><a href="3-css.html#SP3_1">&#167;3.1. How definitions are assimilated</a></li><li><a href="3-css.html#SP3_2">&#167;3.2. How functions are assimilated</a></li><li><a href="3-css.html#SP4">&#167;4. Plumbing</a></li><li><a href="3-css.html#SP6">&#167;6. Inform 6 expressions in constant context</a></li><li><a href="3-css.html#SP11">&#167;11. Delegating the work of compiling function bodies</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-css.html#SP1">&#167;1. Basic idea</a></li><li><a href="3-css.html#SP3_1">&#167;3.1. How definitions are assimilated</a></li><li><a href="3-css.html#SP3_2">&#167;3.2. How functions are assimilated</a></li><li><a href="3-css.html#SP4">&#167;4. Inform 6 annotations</a></li><li><a href="3-css.html#SP5">&#167;5. Plumbing</a></li><li><a href="3-css.html#SP7">&#167;7. Inform 6 expressions in constant context</a></li><li><a href="3-css.html#SP12">&#167;12. Delegating the work of compiling function bodies</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Basic idea. </b>Assimilation is a multi-stage process, but really this stage is the heart of it.
We expect that <span class="extract"><span class="extract-syntax">resolve-conditional-compilation</span></span> has already run, so that the
@ -111,7 +111,7 @@ function definition, that is quite a lot of work.
<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><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#SP12" 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">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><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>
@ -367,7 +367,7 @@ definitions are not so simple.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subpackage_type</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_1_3_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Work out what submodule to put this new material into</span><span class="named-paragraph-number">3.1.3.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">submodule_name</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">content_at</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">submodule_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">content_at</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">submodule_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="named-paragraph-container code-font"><a href="3-css.html#SP3_1_3_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Create a little package within that submodule to hold the content</span><span class="named-paragraph-number">3.1.3.1.1.2</span></a></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">content_at</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>
@ -427,7 +427,7 @@ not already there.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">made_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP4" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">content_at</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">made_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">content_at</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::is_wired</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</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">external_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::wired_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">external_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">made_s</span><span class="plain-syntax">);</span>
@ -444,7 +444,7 @@ not already there.
<pre class="displayed-code all-displayed-code code-font">
<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"> = &amp;</span><span class="identifier-syntax">content_at</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">id_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP4" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"property_id"</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">id_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"property_id"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbol::set_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">id_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAKE_NAME_UNIQUE_ISYMF</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">ConstantInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">id_s</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTypes::unchecked</span><span class="plain-syntax">(), </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(0),</span>
@ -712,7 +712,7 @@ with three things in it:
<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">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">IBM_d</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"actions"</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">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">IBM_d</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"actions"</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">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">IBM_d</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">action_package</span><span class="plain-syntax">;</span>
@ -764,7 +764,7 @@ in other compilation units. So we create <span class="extract"><span class="extr
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP4" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">ConstantInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">action_s</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTypes::unchecked</span><span class="plain-syntax">(), </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(10000), </span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
@ -797,7 +797,7 @@ equating it to a function definition elsewhere.
<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">value</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">val</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::value</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">value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><a href="3-css.html#SP7" class="function-link"><span class="function-syntax">CompileSplatsStage::value</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">value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">directive</span><span class="plain-syntax"> == </span><span class="identifier-syntax">VERB_PLM</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(0);</span>
@ -809,7 +809,7 @@ equating it to a function definition elsewhere.
<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">value</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">val</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::value</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">value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><a href="3-css.html#SP7" class="function-link"><span class="function-syntax">CompileSplatsStage::value</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">value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">directive</span><span class="plain-syntax"> == </span><span class="identifier-syntax">VERB_PLM</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">marker</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">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(0);</span>
@ -946,7 +946,7 @@ which contains the actual code.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">content_at</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"functions"</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">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">content_at</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><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">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"functions"</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">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">content_at</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">OP</span><span class="plain-syntax">, *</span><span class="identifier-syntax">IP</span><span class="plain-syntax">; </span><span class="comment-syntax"> outer and inner packages</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_2_3_1" class="named-paragraph-link"><span class="named-paragraph">Create the outer function package</span><span class="named-paragraph-number">3.2.3.1</span></a></span><span class="plain-syntax">;</span>
@ -975,6 +975,9 @@ which contains the actual code.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">InterBookmark::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</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">Wiring::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">InterBookmark::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</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">PackageInstruction::name_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">IP</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-css.html#SP4" class="function-link"><span class="function-syntax">CompileSplatsStage::apply_annotations</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::I6_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">PackageInstruction::name_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">IP</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">inner_save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterBookmark::snapshot</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">InterBookmark::move_into_package</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="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">block_bookmark</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterBookmark::snapshot</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">);</span>
@ -1019,10 +1022,42 @@ which contains the actual code.
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax">&gt;0) &amp;&amp; (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_at</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">-1)))) </span><span class="identifier-syntax">L</span><span class="plain-syntax">--;</span>
<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#SP11" 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><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>
</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. Plumbing. </b>Some convenient Inter utilities.
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Inform 6 annotations. </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">CompileSplatsStage::apply_annotations</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">CompileSplatsStage::apply_annotations</span></span>:<br/><a href="3-css.html#SP3_2_3_2">&#167;3.2.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">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Trying to apply '%S' to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I6Annotations::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">); </span><span class="identifier-syntax">IA</span><span class="plain-syntax">; </span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="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">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"private"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">terms</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">terms</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">SymbolAnnotation::set_b</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">PRIVATE_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="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">"the +private annotation does not take any terms"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="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">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"replacing"</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">from</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">IA</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">terms</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax"> *</span><span class="identifier-syntax">term</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">terms</span><span 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">term</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"from"</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">value</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::kit_error</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the +replacing annotation does not take the term '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbol::set_replacement</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</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">else</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="plain-syntax"> </span><span class="string-syntax">"annotation not recognised"</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Plumbing. </b>Some convenient Inter utilities.
</p>
<p class="commentary">First, we make a symbol, and also install a socket to it. This essentially
@ -1040,7 +1075,7 @@ which have a single global namespace for functions and variables anyway.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</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">CompileSplatsStage::make_socketed_symbol</span></span>:<br/><a href="3-css.html#SP3_1_3_1_2">&#167;3.1.3.1.2</a>, <a href="3-css.html#SP3_1_3_1_3">&#167;3.1.3.1.3</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1_3">&#167;3.1.3.1.4.5.3.1.3</a></span></button><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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</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">CompileSplatsStage::make_socketed_symbol</span></span>:<br/><a href="3-css.html#SP3_1_3_1_2">&#167;3.1.3.1.2</a>, <a href="3-css.html#SP3_1_3_1_3">&#167;3.1.3.1.3</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1_3">&#167;3.1.3.1.4.5.3.1.3</a></span></button><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">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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTable::create_with_unique_name</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterBookmark::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
@ -1049,7 +1084,7 @@ which have a single global namespace for functions and variables anyway.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_symbol</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>Syppose we are assimilating <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>, and we want to make sure that
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Syppose we are assimilating <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>, and we want to make sure that
the package <span class="extract"><span class="extract-syntax">/main/HypotheticalKit/whatevers</span></span> exists. Here <span class="extract"><span class="extract-syntax">/main/HypotheticalKit</span></span>
is a package of type <span class="extract"><span class="extract-syntax">_module</span></span>, and <span class="extract"><span class="extract-syntax">/main/HypotheticalKit/whatevers</span></span> should be
a <span class="extract"><span class="extract-syntax">_submodule</span></span>. Then we call this function, with <span class="extract"><span class="extract-syntax">name</span></span> set to "whatevers".
@ -1068,7 +1103,7 @@ unlikely to happen: see above.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::make_submodule</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">CompileSplatsStage::make_submodule</span></span>:<br/><a href="3-css.html#SP3_1_3_1_1">&#167;3.1.3.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1">&#167;3.1.3.1.4.5.3.1</a>, <a href="3-css.html#SP3_2_3">&#167;3.2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::make_submodule</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">CompileSplatsStage::make_submodule</span></span>:<br/><a href="3-css.html#SP3_1_3_1_1">&#167;3.1.3.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_1">&#167;3.1.3.1.4.5.3.1</a>, <a href="3-css.html#SP3_2_3">&#167;3.2.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</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">name</span><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><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rp.html#SP5" class="function-link"><span class="function-syntax">RunningPipelines::get_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="constant-syntax">submodule_ptype_RPSYM</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">module_pack</span><span class="plain-syntax"> =</span>
@ -1087,7 +1122,7 @@ unlikely to happen: see above.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Inform 6 expressions in constant context. </b>The following takes the text of a constant written in Inform 6 syntax, and
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Inform 6 expressions in constant context. </b>The following takes the text of a constant written in Inform 6 syntax, and
stored in <span class="extract"><span class="extract-syntax">S</span></span>, and compiles it to an Inter bytecode value pair. The meaning of
these depends on the package they will end up living in, so that must be supplied
as <span class="extract"><span class="extract-syntax">pack</span></span>.
@ -1098,46 +1133,46 @@ from command parser grammar: slightly different syntax applies there.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_pair</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::value</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">CompileSplatsStage::value</span></span>:<br/><a href="3-css.html#SP3_1_3_1_4_1_1">&#167;3.1.3.1.4.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_2">&#167;3.1.3.1.4.5.3.2</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="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">inter_pair</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::value</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">CompileSplatsStage::value</span></span>:<br/><a href="3-css.html#SP3_1_3_1_4_1_1">&#167;3.1.3.1.4.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_3_2">&#167;3.1.3.1.4.5.3.2</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="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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Verbal</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">marker</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">InterBookmark::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</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">from</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)-1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">) == </span><span class="character-syntax">'\''</span><span class="plain-syntax">) &amp;&amp; (</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">to</span><span class="plain-syntax">) == </span><span class="character-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">to</span><span class="plain-syntax"> - </span><span class="identifier-syntax">from</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Parse this as a literal character</span><span class="named-paragraph-number">6.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Parse this as a literal character</span><span class="named-paragraph-number">7.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</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="named-paragraph-container code-font"><a href="3-css.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Parse this as a literal single quotation mark</span><span class="named-paragraph-number">6.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Parse this as a literal single quotation mark</span><span class="named-paragraph-number">7.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Parse this as a single-quoted command grammar word</span><span class="named-paragraph-number">6.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_3" class="named-paragraph-link"><span class="named-paragraph">Parse this as a single-quoted command grammar word</span><span class="named-paragraph-number">7.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">) &amp;&amp; (</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">to</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Parse this as a double-quoted string literal</span><span class="named-paragraph-number">6.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_4" class="named-paragraph-link"><span class="named-paragraph">Parse this as a double-quoted string literal</span><span class="named-paragraph-number">7.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">) == </span><span class="character-syntax">'$'</span><span class="plain-syntax">) &amp;&amp; (</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">from</span><span class="plain-syntax">+1) == </span><span class="character-syntax">'+'</span><span class="plain-syntax">)) ||</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">from</span><span class="plain-syntax">) == </span><span class="character-syntax">'$'</span><span class="plain-syntax">) &amp;&amp; (</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">from</span><span class="plain-syntax">+1) == </span><span class="character-syntax">'-'</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Parse this as a real literal</span><span class="named-paragraph-number">6.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_6" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a hex, binary or decimal literal</span><span class="named-paragraph-number">6.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_7" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a boolean literal</span><span class="named-paragraph-number">6.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Verbal</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_8" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a command grammar token</span><span class="named-paragraph-number">6.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_9" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as an identifier name for something already defined by this kit</span><span class="named-paragraph-number">6.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Parse this as a possibly computed value</span><span class="named-paragraph-number">6.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_5" class="named-paragraph-link"><span class="named-paragraph">Parse this as a real literal</span><span class="named-paragraph-number">7.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_6" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a hex, binary or decimal literal</span><span class="named-paragraph-number">7.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_7" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a boolean literal</span><span class="named-paragraph-number">7.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Verbal</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_8" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as a command grammar token</span><span class="named-paragraph-number">7.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_9" class="named-paragraph-link"><span class="named-paragraph">Attempt to parse this as an identifier name for something already defined by this kit</span><span class="named-paragraph-number">7.9</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_10" class="named-paragraph-link"><span class="named-paragraph">Parse this as a possibly computed value</span><span class="named-paragraph-number">7.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a literal character</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a literal character</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><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">from</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a literal single quotation mark</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a literal single quotation mark</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="character-syntax">'\''</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a single-quoted command grammar word</span><span class="named-paragraph-number">6.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>&#167;7.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a single-quoted command grammar word</span><span class="named-paragraph-number">7.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1159,8 +1194,8 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">dw</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">val</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_4" class="paragraph-anchor"></a><b>&#167;6.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a double-quoted string literal</span><span class="named-paragraph-number">6.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4" class="paragraph-anchor"></a><b>&#167;7.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a double-quoted string literal</span><span class="named-paragraph-number">7.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1172,8 +1207,8 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">dw</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">val</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_5" class="paragraph-anchor"></a><b>&#167;6.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a real literal</span><span class="named-paragraph-number">6.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_5" class="paragraph-anchor"></a><b>&#167;7.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a real literal</span><span class="named-paragraph-number">7.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1185,8 +1220,8 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">rw</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">val</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_6" class="paragraph-anchor"></a><b>&#167;6.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a hex, binary or decimal literal</span><span class="named-paragraph-number">6.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_6" class="paragraph-anchor"></a><b>&#167;7.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a hex, binary or decimal literal</span><span class="named-paragraph-number">7.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1219,16 +1254,16 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_7" class="paragraph-anchor"></a><b>&#167;6.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a boolean literal</span><span class="named-paragraph-number">6.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_7" class="paragraph-anchor"></a><b>&#167;7.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a boolean literal</span><span class="named-paragraph-number">7.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"true"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"false"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(0);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_8" class="paragraph-anchor"></a><b>&#167;6.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a command grammar token</span><span class="named-paragraph-number">6.8</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_8" class="paragraph-anchor"></a><b>&#167;7.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as a command grammar token</span><span class="named-paragraph-number">7.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1296,8 +1331,8 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_9" class="paragraph-anchor"></a><b>&#167;6.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as an identifier name for something already defined by this kit</span><span class="named-paragraph-number">6.9</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_9" class="paragraph-anchor"></a><b>&#167;7.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Attempt to parse this as an identifier name for something already defined by this kit</span><span class="named-paragraph-number">7.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1306,8 +1341,8 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::symbolic</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_10" class="paragraph-anchor"></a><b>&#167;6.10. </b>At this point, maybe the reason we haven't yet recognised the constant <span class="extract"><span class="extract-syntax">S</span></span> is
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_10" class="paragraph-anchor"></a><b>&#167;7.10. </b>At this point, maybe the reason we haven't yet recognised the constant <span class="extract"><span class="extract-syntax">S</span></span> is
that it's a computation like <span class="extract"><span class="extract-syntax">6 + MAX_WEEBLES*4</span></span>. This is quite legal in Inform 6,
and the compiler performs constant-folding to evaluate them: so that's what we will
emulate now. In practice, we are only going to understand fairly simple computations,
@ -1332,67 +1367,67 @@ answer. Since we recurse depth-first, the subsidiary results are always made
before they are needed.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a possibly computed value</span><span class="named-paragraph-number">6.10</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse this as a possibly computed value</span><span class="named-paragraph-number">7.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_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_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#SP7" 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">);</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">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_s</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</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 constant too complex"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::symbolic</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>So this is the recursion. Note that we calculate \(-x\) as \(0 - x\), thus
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>So this is the recursion. Note that we calculate \(-x\) as \(0 - x\), thus
reducing unary subtraction to a case of binary subtraction.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_r</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">CompileSplatsStage::compute_r</span></span>:<br/><a href="3-css.html#SP6_10">&#167;6.10</a>, <a href="3-css.html#SP7_1">&#167;7.1</a>, <a href="3-css.html#SP7_2">&#167;7.2</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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_r</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">CompileSplatsStage::compute_r</span></span>:<br/><a href="3-css.html#SP7_10">&#167;7.10</a>, <a href="3-css.html#SP8_1">&#167;8.1</a>, <a href="3-css.html#SP8_2">&#167;8.2</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><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="identifier-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">-&gt;</span><span class="identifier-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">SUBEXPRESSION_ISNT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP7" 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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_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="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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_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="identifier-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">OPERATION_ISNT</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">op</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PLUS_BIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">op</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONST_LIST_FORMAT_SUM</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TIMES_BIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">op</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONST_LIST_FORMAT_PRODUCT</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MINUS_BIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">op</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONST_LIST_FORMAT_DIFFERENCE</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">op</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONST_LIST_FORMAT_QUOTIENT</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">UNARYMINUS_BIP</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Calculate unary minus</span><span class="named-paragraph-number">7.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="identifier-syntax">UNARYMINUS_BIP</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Calculate unary minus</span><span class="named-paragraph-number">8.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="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="named-paragraph-container code-font"><a href="3-css.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Calculate binary operation</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Calculate binary operation</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">isn_type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-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">isn</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="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="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"malformed EXPRESSION_ISNT"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP9" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_eval</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">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP10" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_eval</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">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate binary operation</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate binary operation</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i1</span><span class="plain-syntax"> = </span><a href="3-css.html#SP7" 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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</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">i2</span><span class="plain-syntax"> = </span><a href="3-css.html#SP7" 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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_node</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">i1</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</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">i2</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-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">i1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP8" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_binary_op</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><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">i1</span><span class="plain-syntax">, </span><span class="identifier-syntax">i2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP9" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_binary_op</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><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">i1</span><span class="plain-syntax">, </span><span class="identifier-syntax">i2</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate unary minus</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate unary minus</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i2</span><span class="plain-syntax"> = </span><a href="3-css.html#SP7" 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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_node</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">i2</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">isn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">child_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">i2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP8" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_binary_op</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CONST_LIST_FORMAT_DIFFERENCE</span><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">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">i2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-css.html#SP9" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_binary_op</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CONST_LIST_FORMAT_DIFFERENCE</span><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">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">i2</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The binary operation \(x + y\) is "calculated" by forming a constant list with
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The binary operation \(x + y\) is "calculated" by forming a constant list with
two entries, \(x\) and \(y\), and marking this list in Inter as a list whose meaning
is the sum of the entries. (And similarly for the other three operations.) This
is a sort of lazy evaluation: it means that the actual calculation will be done
@ -1415,10 +1450,10 @@ But not really more efficient Inter.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_binary_op</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">CompileSplatsStage::compute_binary_op</span></span>:<br/><a href="3-css.html#SP7_1">&#167;7.1</a>, <a href="3-css.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">op</span><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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_binary_op</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">CompileSplatsStage::compute_binary_op</span></span>:<br/><a href="3-css.html#SP8_1">&#167;8.1</a>, <a href="3-css.html#SP8_2">&#167;8.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">op</span><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><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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i1</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i2</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">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterBookmark::package</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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP10" class="function-link"><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</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><a href="3-css.html#SP11" class="function-link"><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</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">MID</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTable::id_at_bookmark</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">result_s</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">KID</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTypes::to_TID</span><span class="plain-syntax">(</span><span class="identifier-syntax">InterBookmark::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">InterTypes::unchecked</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>
@ -1441,24 +1476,24 @@ But not really more efficient Inter.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>So much for recursing down through the nodes of the Inter schema. Here are
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>So much for recursing down through the nodes of the Inter schema. Here are
the leaves:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_eval</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">CompileSplatsStage::compute_eval</span></span>:<br/><a href="3-css.html#SP7">&#167;7</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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::compute_eval</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">CompileSplatsStage::compute_eval</span></span>:<br/><a href="3-css.html#SP8">&#167;8</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><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="identifier-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="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">InterBookmark::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</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">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ist_type</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBER_ISTT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BIN_NUMBER_ISTT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEX_NUMBER_ISTT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">This leaf is a literal number of some kind</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IDENTIFIER_ISTT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">This leaf is a symbol name</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEX_NUMBER_ISTT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">This leaf is a literal number of some kind</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IDENTIFIER_ISTT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">This leaf is a symbol name</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This leaf is a literal number of some kind</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This leaf is a literal number of some kind</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1471,14 +1506,14 @@ the leaves:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">InterValuePairs::is_undef</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</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><a href="3-css.html#SP10" class="function-link"><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</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><a href="3-css.html#SP11" class="function-link"><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</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><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">ConstantInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTypes::unchecked</span><span class="plain-syntax">(), </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b>This is the harder case by far, despite the brevity of the following code.
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b>This is the harder case by far, despite the brevity of the following code.
Here we run into, say, <span class="extract"><span class="extract-syntax">MAX_ELEPHANTS</span></span>, some identifier which clearly refers
to something defined elsewhere. If it has already been defined in the kit
being compiled, then there's a socket of that name already, and we can use
@ -1488,7 +1523,7 @@ compilation unit, so we create a plug called <span class="extract"><span class="
linker stage worry about what it means later on.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This leaf is a symbol name</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This leaf is a symbol name</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1498,15 +1533,15 @@ linker stage worry about what it means later on.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_s</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The above algorithm needs a lot of names for partial results of expressions,
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The above algorithm needs a lot of names for partial results of expressions,
all of which have to become Inter symbols. It really doesn't matter what these
are called.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ccs_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</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">CompileSplatsStage::new_ccv_symbol</span></span>:<br/><a href="3-css.html#SP8">&#167;8</a>, <a href="3-css.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileSplatsStage::new_ccv_symbol</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">CompileSplatsStage::new_ccv_symbol</span></span>:<br/><a href="3-css.html#SP9">&#167;9</a>, <a href="3-css.html#SP10_1">&#167;10.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</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">NN</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">NN</span><span class="plain-syntax">, </span><span class="string-syntax">"Computed_Constant_Value_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ccs_count</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>
@ -1516,7 +1551,7 @@ are called.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Delegating the work of compiling function bodies. </b>Function bodies are by far the hardest things to compile. We delegate this first
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Delegating the work of compiling function bodies. </b>Function bodies are by far the hardest things to compile. We delegate this first
by storing up a list of requests to do the work:
</p>
@ -1532,7 +1567,7 @@ by storing up a list of requests to do the work:
<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('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">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="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="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>
@ -1549,13 +1584,13 @@ by storing up a list of requests to do the work:
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure function_body_request is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>...Playing back through those requests here. Note that we turn the entire
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>...Playing back through those requests here. Note that we turn the entire
contents of the function &mdash; which can be very large, for example in the Inform
kit <span class="extract"><span class="extract-syntax">CommandParserKit</span></span> &mdash; as a single gigantic Inter schema <span class="extract"><span class="extract-syntax">sch</span></span>.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::function_bodies</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_bodies</span></span>:<br/><a href="3-css.html#SP2">&#167;2</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="reserved-syntax">compile_splats_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">css</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::function_bodies</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">CompileSplatsStage::function_bodies</span></span>:<br/><a href="3-css.html#SP2">&#167;2</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="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="identifier-syntax">inter_tree</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">errors_occurred</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>
@ -1564,20 +1599,20 @@ kit <span class="extract"><span class="extract-syntax">CommandParserKit</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="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#SP13" 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><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>
<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="identifier-syntax">SCHEMA_COMPILATION_DA</span><span class="plain-syntax">)) </span><span class="identifier-syntax">InterSchemas::log</span><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>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP12_1" class="named-paragraph-link"><span class="named-paragraph">Compile this function body</span><span class="named-paragraph-number">12.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Compile this function body</span><span class="named-paragraph-number">13.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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="identifier-syntax">errors_occurred</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">errors_occurred</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12_1" class="paragraph-anchor"></a><b>&#167;12.1. </b>And then we emit Inter code equivalent to <span class="extract"><span class="extract-syntax">sch</span></span>:
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b>And then we emit Inter code equivalent to <span class="extract"><span class="extract-syntax">sch</span></span>:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile this function body</span><span class="named-paragraph-number">12.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile this function body</span><span class="named-paragraph-number">13.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1593,16 +1628,16 @@ kit <span class="extract"><span class="extract-syntax">CommandParserKit</span></
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifierFinders::next_priority</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">finder</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifierFinders::next_priority</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">finder</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitInterSchemas::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="identifier-syntax">finder</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-css.html#SP13" 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><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="identifier-syntax">Produce::pop_code_position</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::set_function</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP12">&#167;12</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Either parsing or emitting can throw errors, so at both stages:
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Either parsing or emitting can throw errors, so at both stages:
</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">CompileSplatsStage::report_kit_errors</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">CompileSplatsStage::report_kit_errors</span></span>:<br/><a href="3-css.html#SP12">&#167;12</a>, <a href="3-css.html#SP12_1">&#167;12.1</a></span></button><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="reserved-syntax">function_body_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::report_kit_errors</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">CompileSplatsStage::report_kit_errors</span></span>:<br/><a href="3-css.html#SP13">&#167;13</a>, <a href="3-css.html#SP13_1">&#167;13.1</a></span></button><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="reserved-syntax">function_body_request</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">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>

View file

@ -356,25 +356,47 @@ state being carried in the docket.
<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::splat</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::splat</span></span>:<br/><a href="3-ps.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">R</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="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">R</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Find annotation, if any</span><span class="named-paragraph-number">6.1</span></a></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">I6_dir</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Find directive</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Find directive</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> != </span><span class="identifier-syntax">WHITESPACE_PLM</span><span class="plain-syntax">) {</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="identifier-syntax">inter_bookmark</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">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">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="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="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>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> (*(</span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">error_callback</span><span class="plain-syntax">))(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this annotation seems not to apply to any directive: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</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">R</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">A</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b>A <span class="extract"><span class="extract-syntax">SPLAT_IST</span></span> node should record which sort of Inform 6 directive it contains,
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find annotation, if any</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I6Annotations::check</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax"> (*(</span><span class="identifier-syntax">docket</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">error_callback</span><span class="plain-syntax">))(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this Inform 6 annotation is malformed: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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;</span><span class="identifier-syntax">verdict</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">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</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">Str::delete_n_characters</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">verdict</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>A <span class="extract"><span class="extract-syntax">SPLAT_IST</span></span> node should record which sort of Inform 6 directive it contains,
assuming we know that. We will recognise only the following set, and use <span class="extract"><span class="extract-syntax">MYSTERY_PLM</span></span>
for anything else. If the splat doesn't appear to be a directive at all, we leave
the directive type as 0.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find directive</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find directive</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -168,20 +168,27 @@ regular users: it would be quite slow to read in.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Rival definitions of '%S':\nkit: $3\ntree: $3\n"</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">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Rival definitions of '%S':\ntree: $3\nkit: $3\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">defn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">override</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">override</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pipeline</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">replacements_list</span><span class="plain-syntax">[</span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree_argument</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">N</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">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">defn_name</span><span class="plain-syntax">)) </span><span class="identifier-syntax">override</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">override</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tree_replaces</span><span class="plain-syntax"> = </span><a href="4-lbks.html#SP4" class="function-link"><span class="function-syntax">LoadBinaryKitsStage::replaces</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_replaces</span><span class="plain-syntax"> = </span><a href="4-lbks.html#SP4" class="function-link"><span class="function-syntax">LoadBinaryKitsStage::replaces</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tree_replaces</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"$3 replaces $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kit_replaces</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"$3 replaces $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">tree_replaces</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">kit_replaces</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">override</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">tree_replaces</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">kit_replaces</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">override</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">override</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r_val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ConstantInstruction::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s_val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ConstantInstruction::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">sidecar_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">r_val</span><span class="plain-syntax"> == </span><span class="identifier-syntax">s_val</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">r_val</span><span class="plain-syntax"> != -1)) </span><span class="identifier-syntax">override</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">override</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Override the new definition with the existing one</span><span class="named-paragraph-number">3.2.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Throw an error for the duplication</span><span class="named-paragraph-number">3.2.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">override</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Override the new definition with the existing one</span><span class="named-paragraph-number">3.2.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">override</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Override the existing definition with the new one</span><span class="named-paragraph-number">3.2.1.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2_1_3" class="named-paragraph-link"><span class="named-paragraph">Throw an error for the duplication</span><span class="named-paragraph-number">3.2.1.3</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-lbks.html#SP3_2">&#167;3.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2_1_1" class="paragraph-anchor"></a><b>&#167;3.2.1.1. </b>The following (unfortunately) has to do something subtle. We need the definition
@ -220,7 +227,31 @@ the symbols table dictionary.
<span class="plain-syntax"> </span><span class="identifier-syntax">sidecar_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">sidecar_end</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-lbks.html#SP3_2_1">&#167;3.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2_1_2" class="paragraph-anchor"></a><b>&#167;3.2.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw an error for the duplication</span><span class="named-paragraph-number">3.2.1.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_2_1_2" class="paragraph-anchor"></a><b>&#167;3.2.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Override the existing definition with the new one</span><span class="named-paragraph-number">3.2.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">main_connectors</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LargeScale::connectors_package_if_it_exists</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">main_connectors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterPackage::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">main_connectors</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">InterSymbolsTable::unname</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">defn_name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot strike socket name"</span><span class="plain-syntax">);</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">plug</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">defn_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbol::strike_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</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">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"S = $3\n"</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"plug = $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</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">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"rival_end = $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">plug</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"After overriding the tree definition, we have:\n"</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">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"A new plug $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</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">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Tree defn symbol $3 ~~&gt; $3\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">rival_end</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-lbks.html#SP3_2_1">&#167;3.2.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2_1_3" class="paragraph-anchor"></a><b>&#167;3.2.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw an error for the duplication</span><span class="named-paragraph-number">3.2.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -250,6 +281,20 @@ of the sidecar and put it into the main tree.
<span class="plain-syntax"> </span><span class="identifier-syntax">Transmigration::move</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">LargeScale::main_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-lbks.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">LoadBinaryKitsStage::replaces</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">LoadBinaryKitsStage::replaces</span></span>:<br/><a href="4-lbks.html#SP3_2_1">&#167;3.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</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">X_rep</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::get_replacement</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">X_rep</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTable::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">Y</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">owning_table</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">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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">X_rep</span><span class="plain-syntax">, </span><span class="identifier-syntax">InterPackage::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</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">InterPackage::parent</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-css.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">lbks</li><li class="progresssection"><a href="4-sws.html">sws</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresssection"><a href="4-tsk.html">tsk</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-sws.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -3378,6 +3378,43 @@ debugging the I6 parser than by actual players.
<span class="plain-syntax"> </span><span class="string-syntax">"is unset"</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"no pronouns are known to the game."</span><span class="plain-syntax"> (</span><span class="identifier-syntax">D</span><span class="plain-syntax">).</span>
</pre>
<p class="commentary firstcommentary"><a id="SP181" class="paragraph-anchor"></a><b>&#167;181. </b>The dialogue system offers an action "talking about", but not "talking to X about":
this is a model of conversation which is aimed at simulating multi-person encounters,
where lines are spoken more into the room than at any one person.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Section</span><span class="plain-syntax"> </span><span class="constant-syntax">10</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Dialogue</span><span class="plain-syntax">-</span><span class="identifier-syntax">related</span><span class="plain-syntax"> </span><span class="identifier-syntax">actions</span><span class="plain-syntax"> (</span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">Talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">applying</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">one</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">leading</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax"> </span><span class="identifier-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax"> </span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">other</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Before</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</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">repeat</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">running</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">available</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</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">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">performable</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">speaker</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">add</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">leading</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">add</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">other</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Carry</span><span class="plain-syntax"> </span><span class="identifier-syntax">out</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</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">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax">-</span><span class="identifier-syntax">declared</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">leading</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">perform</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">leading</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">other</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">perform</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">other</span><span class="plain-syntax"> </span><span class="identifier-syntax">beats</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">continue</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">player</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">actor</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"There is no reply."</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">otherwise</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say</span><span class="plain-syntax"> </span><span class="string-syntax">"[The actor] [talk] about [T]."</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stop</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">action</span><span class="plain-syntax">.</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="S-act.html">&#10094;</a></li><li class="progresssection"><a href="S-prm.html">prm</a></li><li class="progresssection"><a href="S-pwm.html">pwm</a></li><li class="progresssection"><a href="S-var.html">var</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresscurrent">act2</li><li class="progresssection"><a href="S-cg.html">cg</a></li><li class="progresssection"><a href="S-pd.html">pd</a></li><li class="progressnext"><a href="S-cg.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -286,6 +286,16 @@ fact used in the default grammar above, but is available for authors.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">understand</span><span class="plain-syntax"> </span><span class="identifier-syntax">token</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">time</span><span class="plain-syntax"> </span><span class="identifier-syntax">period</span><span class="plain-syntax"> </span><span class="identifier-syntax">translates</span><span class="plain-syntax"> </span><span class="identifier-syntax">into</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="string-syntax">"RELATIVE_TIME_TOKEN"</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Section</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> - </span><span class="identifier-syntax">Dialogue</span><span class="plain-syntax">-</span><span class="identifier-syntax">related</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar</span><span class="plain-syntax"> (</span><span class="identifier-syntax">for</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax"> </span><span class="identifier-syntax">only</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"ask about [concept]"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"ask about [visible thing]"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"talk about [concept]"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Understand</span><span class="plain-syntax"> </span><span class="string-syntax">"talk about [visible thing]"</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> </span><span class="identifier-syntax">talking</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax">.</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="S-act2.html">&#10094;</a></li><li class="progresssection"><a href="S-prm.html">prm</a></li><li class="progresssection"><a href="S-pwm.html">pwm</a></li><li class="progresssection"><a href="S-var.html">var</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-act2.html">act2</a></li><li class="progresscurrent">cg</li><li class="progresssection"><a href="S-pd.html">pd</a></li><li class="progressnext"><a href="S-pd.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -1404,6 +1404,8 @@ some response texts can be hung.
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorAlterLiveSubjectList</span><span class="plain-syntax">({-</span><span class="identifier-syntax">by</span><span class="plain-syntax">-</span><span class="identifier-syntax">reference</span><span class="plain-syntax">:</span><span class="identifier-syntax">L</span><span class="plain-syntax">}); -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">objects</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">speakers</span><span class="plain-syntax"> </span><span class="identifier-syntax">required</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorBeatRequiredList</span><span class="plain-syntax">({-</span><span class="identifier-syntax">new</span><span class="plain-syntax">:</span><span class="identifier-syntax">list</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> </span><span class="identifier-syntax">objects</span><span class="plain-syntax">}, {</span><span class="identifier-syntax">B</span><span class="plain-syntax">}) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">opening</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorBeatOpeningLine</span><span class="plain-syntax">({</span><span class="identifier-syntax">B</span><span class="plain-syntax">}) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">textual</span><span class="plain-syntax"> </span><span class="identifier-syntax">content</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</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">DirectorLineContent</span><span class="plain-syntax">({</span><span class="identifier-syntax">L</span><span class="plain-syntax">}, {-</span><span class="identifier-syntax">new</span><span class="plain-syntax">:</span><span class="identifier-syntax">text</span><span class="plain-syntax">}) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">text</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">textual</span><span class="plain-syntax"> </span><span class="identifier-syntax">content</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">choice</span><span class="plain-syntax">):</span>
@ -1416,9 +1418,29 @@ some response texts can be hung.
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">performance</span><span class="plain-syntax"> </span><span class="identifier-syntax">style</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">current</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">line</span><span class="plain-syntax"> </span><span class="identifier-syntax">style</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorCurrentLineStyle</span><span class="plain-syntax">() -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">what</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">chosen</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> - </span><span class="identifier-syntax">number</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorPickANumber</span><span class="plain-syntax">({</span><span class="identifier-syntax">N</span><span class="plain-syntax">}) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">perform</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorPerformBeat</span><span class="plain-syntax">({</span><span class="identifier-syntax">B</span><span class="plain-syntax">}); -).</span>
<span class="identifier-syntax">Topicality</span><span class="plain-syntax"> </span><span class="identifier-syntax">relates</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">matches</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">Performability</span><span class="plain-syntax"> </span><span class="identifier-syntax">relates</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> (</span><span class="identifier-syntax">called</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="identifier-syntax">when</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax"> </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">have</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> </span><span class="identifier-syntax">performed</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">topicality</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">The</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> </span><span class="identifier-syntax">performable</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">performability</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation</span><span class="plain-syntax">.</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">) </span><span class="identifier-syntax">matches</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> - </span><span class="identifier-syntax">object</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">DirectorBeatAbout</span><span class="plain-syntax">({</span><span class="identifier-syntax">B</span><span class="plain-syntax">}, {</span><span class="identifier-syntax">S</span><span class="plain-syntax">})) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> - </span><span class="identifier-syntax">object</span><span class="plain-syntax">) </span><span class="identifier-syntax">can</span><span class="plain-syntax"> </span><span class="identifier-syntax">have</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">) </span><span class="identifier-syntax">performed</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">DirectorBeatAccessible</span><span class="plain-syntax">({</span><span class="identifier-syntax">B</span><span class="plain-syntax">}, {</span><span class="identifier-syntax">S</span><span class="plain-syntax">})) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">which</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax"> </span><span class="identifier-syntax">is</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> </span><span class="identifier-syntax">speaker</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax"> (</span><span class="identifier-syntax">B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax"> </span><span class="identifier-syntax">beat</span><span class="plain-syntax">):</span>
<span class="plain-syntax"> (- (</span><span class="identifier-syntax">DirectorBeatFirstSpeaker</span><span class="plain-syntax">({</span><span class="identifier-syntax">B</span><span class="plain-syntax">})) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">whether</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax">/</span><span class="identifier-syntax">dialog</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> (</span><span class="identifier-syntax">O</span><span class="plain-syntax"> - </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax">) </span><span class="identifier-syntax">intervenes</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> (- </span><span class="identifier-syntax">DirectorIntervenes</span><span class="plain-syntax">({</span><span class="identifier-syntax">O</span><span class="plain-syntax">}, </span><span class="identifier-syntax">nothing</span><span class="plain-syntax">) -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">decide</span><span class="plain-syntax"> </span><span class="identifier-syntax">whether</span><span class="plain-syntax"> </span><span class="identifier-syntax">dialogue</span><span class="plain-syntax">/</span><span class="identifier-syntax">dialog</span><span class="plain-syntax"> </span><span class="identifier-syntax">about</span><span class="plain-syntax"> (</span><span class="identifier-syntax">O</span><span class="plain-syntax"> - </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax">) </span><span class="identifier-syntax">led</span><span class="plain-syntax"> </span><span class="identifier-syntax">by</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> - </span><span class="identifier-syntax">an</span><span class="plain-syntax"> </span><span class="identifier-syntax">object</span><span class="plain-syntax">) </span><span class="identifier-syntax">intervenes</span><span class="plain-syntax">:</span>

View file

@ -1,5 +1,5 @@
Size of lexicon: 3118 excerpt meanings
Stored among 844 words out of total vocabulary of 10646
Stored among 844 words out of total vocabulary of 10663
714 words have a start list: longest belongs to report (with 293 meanings)
15 words have an end list: longest belongs to case (with 6 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)

View file

@ -1,6 +1,6 @@
<preform-nonterminal> internal nti 28 constraint (none) extremes [1, 1]
<if-start-of-paragraph> internal hits 1240/7964 nti 29 constraint (none) extremes [0, 0]
<if-start-of-paragraph> internal hits 1255/8024 nti 29 constraint (none) extremes [0, 0]
<if-not-cap> internal hits 3875/7966 nti 30 constraint (none) extremes [0, 0]
@ -24,7 +24,7 @@
<empty-text> internal nti 11 constraint (none) extremes [1, 1]
<if-start-of-source-text> internal hits 2/13226 nti 12 constraint (none) extremes [0, 0]
<if-start-of-source-text> internal hits 2/13312 nti 12 constraint (none) extremes [0, 0]
<list-or-division> hits 0/18 nti 16 constraint DS = {16} extremes [3, infinity)
English:
@ -5496,59 +5496,59 @@
<natural-language> internal nti 18 constraint (none) extremes [1, infinity)
<dividing-sentence> hits 203/10452 nti 19 constraint DW = {18, 19} extremes [2, infinity)
<dividing-sentence> hits 205/10538 nti 19 constraint DW = {18, 19} extremes [2, infinity)
English:
<if-start-of-paragraph> <heading>
(hits 195/3968) (matched long text) constraint DS = {18} extremes [2, infinity)
(hits 197/3998) (matched long text) constraint DS = {18} extremes [2, infinity)
<extension-end-marker-sentence>
(hits 8/4022) (matched long text) constraint DS = {19} extremes [3, infinity)
(hits 8/4054) (matched long text) constraint DS = {19} extremes [3, infinity)
<heading> hits 195/2452 nti 18 constraint DS = {18} extremes [2, infinity)
<heading> hits 197/2482 nti 18 constraint DS = {18} extremes [2, infinity)
English:
volume {...}
(hits 6/1226) (matched long text) constraint DS = {18} extremes [2, infinity)
(hits 6/1241) (matched long text) constraint DS = {18} extremes [2, infinity)
book {...}
(hits 0/1220) constraint DS = {18} extremes [2, infinity)
(hits 0/1235) constraint DS = {18} extremes [2, infinity)
part {...}
(hits 14/1220) (matched: 'part two - the physical world model') constraint DS = {18} extremes [2, infinity)
(hits 14/1235) (matched: 'part two - the physical world model') constraint DS = {18} extremes [2, infinity)
chapter {...}
(hits 20/1206) (matched long text) constraint DS = {18} extremes [2, infinity)
(hits 20/1221) (matched long text) constraint DS = {18} extremes [2, infinity)
section {...} ( dialog )
(hits 0/1107) constraint DS = {18} extremes [5, infinity)
(hits 0/1122) constraint DS = {18} extremes [5, infinity)
section {...} ( dialogue )
(hits 0/1107) constraint DS = {18} extremes [5, infinity)
(hits 0/1122) constraint DS = {18} extremes [5, infinity)
section {...}
(hits 155/1186) (matched long text) constraint DS = {18} extremes [2, infinity)
(hits 157/1201) (matched long text) constraint DS = {18} extremes [2, infinity)
<extension-end-marker-sentence> hits 8/8044 nti 19 constraint DS = {19} extremes [3, infinity)
<extension-end-marker-sentence> hits 8/8108 nti 19 constraint DS = {19} extremes [3, infinity)
English:
{...} begin/begins here
(hits 4/4022) (matched long text) constraint DS = {19} extremes [3, infinity)
(hits 4/4054) (matched long text) constraint DS = {19} extremes [3, infinity)
{...} end/ends here
(hits 4/4018) (matched: 'the standard rules end here') constraint DS = {19} extremes [3, infinity)
(hits 4/4050) (matched: 'the standard rules end here') constraint DS = {19} extremes [3, infinity)
<structural-sentence> hits 32/13226 nti 21 constraint (none) extremes [1, infinity)
<structural-sentence> hits 32/13312 nti 21 constraint (none) extremes [1, infinity)
English:
<if-start-of-source-text> <quoted-text>
(hits 0/20) constraint (none) extremes [1, 1]
<if-start-of-source-text> <quoted-text> {...}
(hits 0/6593) constraint (none) extremes [2, infinity)
(hits 0/6636) constraint (none) extremes [2, infinity)
<language-modifying-sentence>
(hits 0/6456) constraint DS = {20} extremes [4, infinity)
(hits 0/6499) constraint DS = {20} extremes [4, infinity)
*
constraint CS = {21} extremes [1, 1]
* <quoted-text-without-subs>
constraint DS = {21} extremes [2, 2]
<if-start-of-paragraph> table {...}
(hits 14/6554) (matched long text) constraint DS = {21} extremes [2, infinity)
(hits 14/6597) (matched long text) constraint DS = {21} extremes [2, infinity)
<if-start-of-paragraph> equation {...}
(hits 0/6540) constraint DS = {21} extremes [2, infinity)
(hits 0/6583) constraint DS = {21} extremes [2, infinity)
include the {...} by {...}
(hits 0/6466) constraint DS = {21} extremes [5, infinity)
(hits 0/6509) constraint DS = {21} extremes [5, infinity)
include {...} by {...}
(hits 18/6540) (matched long text) constraint DS = {21} extremes [4, infinity)
(hits 18/6583) (matched long text) constraint DS = {21} extremes [4, infinity)
include (- {...}
(hits 0/6522) constraint DS = {21} extremes [3, infinity)
(hits 0/6565) constraint DS = {21} extremes [3, infinity)
<comma-divisible-sentence> hits 9/2792 nti 22 constraint DS = {22} extremes [2, infinity)
English:
@ -5563,17 +5563,17 @@
when {...}
(hits 4/981) (matched: 'when scene begins is a scene based rulebook') constraint DS = {22} extremes [2, infinity)
<language-modifying-sentence> hits 0/12912 nti 20 constraint DS = {20} extremes [4, infinity)
<language-modifying-sentence> hits 0/12998 nti 20 constraint DS = {20} extremes [4, infinity)
English:
include (- {###} in the preform grammar
(hits 0/132) constraint DS = {20} extremes [7, 7]
use {...} language element/elements
(hits 0/6456) constraint DS = {20} extremes [4, infinity)
(hits 0/6499) constraint DS = {20} extremes [4, infinity)
<heading-qualifier> hits 34/458 nti 28 constraint DS = {28} extremes [2, infinity)
<heading-qualifier> hits 36/466 nti 28 constraint DS = {28} extremes [2, infinity)
English:
{...} ( <bracketed-heading-qualifier> )
(hits 17/107) (matched long text) constraint DS = {28} extremes [4, infinity)
(hits 19/109) (matched long text) constraint DS = {28} extremes [4, infinity)
{...} not for release
(hits 1/90) (matched long text) constraint DS = {28} extremes [4, infinity)
{...} for release only
@ -5581,7 +5581,7 @@
{...} unindexed
(hits 16/89) (matched long text) constraint DS = {28} extremes [2, infinity)
<bracketed-heading-qualifier> hits 17/34 nti 27 constraint DW = {24, 26, 27} extremes [1, infinity)
<bracketed-heading-qualifier> hits 19/38 nti 27 constraint DW = {24, 26, 27} extremes [1, infinity)
English:
not for release
constraint CS = {27} extremes [3, 3]
@ -5594,21 +5594,21 @@
dialog
constraint CS = {27} extremes [1, 1]
<platform-qualifier>
(hits 17/17) (matched: 'not for interactive fiction language element') constraint DS = {24} extremes [3, infinity)
(hits 19/19) (matched: 'not for interactive fiction language element') constraint DS = {24} extremes [3, infinity)
<extension-qualifier>
constraint DS = {25, 26} extremes [6, infinity)
<platform-qualifier> hits 17/34 nti 24 constraint DS = {24} extremes [3, infinity)
<platform-qualifier> hits 19/38 nti 24 constraint DS = {24} extremes [3, infinity)
English:
for <platform-identifier> only
(hits 8/17) (matched: 'for interactive fiction language element only') constraint DS = {24} extremes [3, infinity)
(hits 10/19) (matched: 'for interactive fiction language element only') constraint DS = {24} extremes [3, infinity)
not for <platform-identifier>
(hits 9/9) (matched: 'not for interactive fiction language element') constraint DS = {24} extremes [3, infinity)
<platform-identifier> hits 17/34 nti 23 constraint (none) extremes [1, infinity)
<platform-identifier> hits 19/38 nti 23 constraint (none) extremes [1, infinity)
English:
<language-element> language element
(hits 10/10) (matched: 'interactive fiction language element') constraint DS = {23} extremes [3, infinity)
(hits 12/12) (matched: 'interactive fiction language element') constraint DS = {23} extremes [3, infinity)
{......} language element
constraint DS = {23} extremes [3, infinity)
<current-virtual-machine>
@ -5808,7 +5808,7 @@
superbrief room descriptions
(hits 1/1) (matched: 'superbrief room descriptions') constraint CS = {29} extremes [3, 3]
<language-element> internal hits 10/20 nti 27 constraint (none) extremes [1, infinity)
<language-element> internal hits 12/24 nti 27 constraint (none) extremes [1, infinity)
<bootstrap-verb> nti 17 constraint CS = {17} extremes [1, 1]
English:
@ -8637,12 +8637,12 @@
{<heading-name-hyphenated>}
(hits 79/79) (matched long text) constraint (none) extremes [1, infinity)
<heading-name-hyphenated> hits 433/866 nti 22 constraint (none) extremes [1, infinity)
<heading-name-hyphenated> hits 435/870 nti 22 constraint (none) extremes [1, infinity)
English:
{...} - {...} - {...}
(hits 17/354) (matched long text) constraint DS = {22} extremes [5, infinity)
(hits 17/356) (matched long text) constraint DS = {22} extremes [5, infinity)
{...} - {...}
(hits 416/416) (matched long text) constraint DS = {22} extremes [3, infinity)
(hits 418/418) (matched long text) constraint DS = {22} extremes [3, infinity)
{...}
constraint (none) extremes [1, infinity)

View file

@ -1,13 +1,13 @@
Total memory consumption was 121183K = 118 MB
Total memory consumption was 121193K = 118 MB
---- was used for 2052140 objects, in 365872 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2052256 objects, in 365889 frames in 0 x 800K = 0K = 0 MB:
33.6% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
21.0% text_stream_array 4631 x 100 = 463100 objects, 26081792 bytes
19.8% linked_list 44034 objects, 24659040 bytes
21.0% text_stream_array 4632 x 100 = 463200 objects, 26087424 bytes
19.8% linked_list 44036 objects, 24660160 bytes
11.4% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes
10.6% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
8.3% parse_node 129816 objects, 10385280 bytes
8.3% parse_node 129818 objects, 10385440 bytes
6.0% verb_conjugation 162 objects, 7518096 bytes
4.4% parse_node_annotation_array 346 x 500 = 173000 objects, 5547072 bytes
2.7% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
@ -16,13 +16,13 @@ Total memory consumption was 121183K = 118 MB
1.7% scan_directory 532 objects, 2196096 bytes
1.6% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.6% inter_schema_token 14131 objects, 2034864 bytes
1.5% package_request 21172 objects, 1863136 bytes
1.5% package_request 21174 objects, 1863312 bytes
1.4% vocabulary_entry_array 162 x 100 = 16200 objects, 1819584 bytes
1.2% dict_entry_array 475 x 100 = 47500 objects, 1535200 bytes
1.2% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
1.2% inter_symbols_table 26633 objects, 1491448 bytes
1.2% inter_symbols_table 26635 objects, 1491560 bytes
1.1% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes
1.0% inter_package 26633 objects, 1278384 bytes
1.0% inter_package 26635 objects, 1278480 bytes
0.9% map_data 675 objects, 1134000 bytes
0.8% id_body 946 objects, 1082224 bytes
0.8% adjective_meaning 202 objects, 1000304 bytes
@ -36,7 +36,7 @@ Total memory consumption was 121183K = 118 MB
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
0.3% verb_usage 1148 objects, 394912 bytes
0.2% rule 470 objects, 368480 bytes
0.2% dictionary 7608 objects, 365184 bytes
0.2% dictionary 7610 objects, 365280 bytes
0.2% verb_form 388 objects, 350752 bytes
0.2% noun 2387 objects, 286440 bytes
0.2% compilation_subtask 3365 objects, 269200 bytes
@ -82,12 +82,12 @@ Total memory consumption was 121183K = 118 MB
---- to_family_data 501 objects, 40080 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- heading 204 objects, 39168 bytes
---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes
---- heading 202 objects, 38784 bytes
---- parsing_data 675 objects, 37800 bytes
---- production_list 629 objects, 35224 bytes
---- counting_data 675 objects, 32400 bytes
---- regions_data 675 objects, 32400 bytes
---- counting_data 675 objects, 32400 bytes
---- property_permission 96 objects, 31488 bytes
---- stack_frame_box 305 objects, 29280 bytes
---- verb_sense 405 objects, 29160 bytes
@ -136,8 +136,8 @@ Total memory consumption was 121183K = 118 MB
---- parsing_pp_data 96 objects, 4608 bytes
---- build_script 140 objects, 4480 bytes
---- compatibility_specification 84 objects, 4032 bytes
---- command_line_switch 49 objects, 3920 bytes
---- activity 35 objects, 3920 bytes
---- command_line_switch 49 objects, 3920 bytes
---- parse_node_annotation_type 119 objects, 3808 bytes
---- submodule_request 85 objects, 3400 bytes
---- method_set 105 objects, 3360 bytes
@ -149,10 +149,10 @@ Total memory consumption was 121183K = 118 MB
---- either_or_property_data 62 objects, 2976 bytes
---- target_vm 20 objects, 2880 bytes
---- use_option 29 objects, 2552 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- scene 1 object, 2352 bytes
---- JSON_type 31 objects, 2232 bytes
@ -165,20 +165,20 @@ Total memory consumption was 121183K = 118 MB
---- noun_filter_token 22 objects, 1408 bytes
---- inter_node_array 34 objects, 1360 bytes
---- special_meaning_holder 33 objects, 1320 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- JSON_requirement 36 objects, 1152 bytes
---- tree_inventory_item 28 objects, 1120 bytes
---- inbuild_requirement 27 objects, 1080 bytes
---- runtime_kind_structure 13 objects, 1040 bytes
---- submodule_identity 32 objects, 1024 bytes
---- quantifier 16 objects, 1024 bytes
---- pipeline_stage 20 objects, 960 bytes
---- submodule_identity 32 objects, 1024 bytes
---- named_rulebook_outcome 15 objects, 960 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- pipeline_stage 20 objects, 960 bytes
---- web_md 6 objects, 864 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- JSON_pair_requirement 26 objects, 832 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
@ -194,69 +194,69 @@ Total memory consumption was 121183K = 118 MB
---- chapter_md 6 objects, 528 bytes
---- small_word_set 11 objects, 528 bytes
---- inform_language 6 objects, 480 bytes
---- module 6 objects, 480 bytes
---- equation 4 objects, 480 bytes
---- i6_memory_setting 14 objects, 448 bytes
---- inter_annotation_form 12 objects, 480 bytes
---- module 6 objects, 480 bytes
---- bp_family 14 objects, 448 bytes
---- i6_memory_setting 14 objects, 448 bytes
---- inference_family 11 objects, 440 bytes
---- inter_annotation_form 10 objects, 400 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- inbuild_genre 7 objects, 336 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- cached_kind_declaration 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- module_request 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- inter_pipeline 1 object, 312 bytes
---- tree_inventory 1 object, 312 bytes
---- up_family 9 objects, 288 bytes
---- contents_entry 7 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- inform_project 1 object, 224 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- build_skill 5 objects, 200 bytes
---- code_generator 5 objects, 200 bytes
---- kit_dependency 4 objects, 192 bytes
---- build_skill 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- kit_dependency 4 objects, 192 bytes
---- element_activation 5 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- attachment_instruction 4 objects, 160 bytes
---- inbuild_nest 3 objects, 120 bytes
---- local_block_value 2 objects, 112 bytes
---- inform_kit_ittt 2 objects, 96 bytes
---- group_together_function 2 objects, 80 bytes
---- article 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- group_together_function 2 objects, 80 bytes
---- inter_warehouse 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- HTML_file_state 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- HTML_file_state 1 object, 48 bytes
---- I6_generation_data 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
100.0% was used for memory not allocated for objects:
56.8% text stream storage 70549176 bytes in 480351 claims
4.2% dictionary storage 5305856 bytes in 7608 claims
56.8% text stream storage 70558060 bytes in 480436 claims
4.2% dictionary storage 5306880 bytes in 7610 claims
---- sorting 1560 bytes in 159 claims
5.8% source text 7200000 bytes in 3 claims
8.7% source text details 10800000 bytes in 2 claims
0.2% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
3.6% inter symbols storage 4559744 bytes in 27996 claims
13.5% inter bytecode storage 16768072 bytes in 14 claims
3.6% inter symbols storage 4560000 bytes in 27998 claims
13.5% inter bytecode storage 16767904 bytes in 14 claims
5.0% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
1.3% instance-of-kind counting 1721344 bytes in 1 claim
@ -265,5 +265,5 @@ Total memory consumption was 121183K = 118 MB
---- code generation workspace for objects 3480 bytes in 19 claims
0.2% emitter array storage 280544 bytes in 2001 claims
-150.-2% was overhead - -186462728 bytes = -182092K = -177 MB
-150.-2% was overhead - -186470584 bytes = -182100K = -177 MB

View file

@ -1,33 +1,33 @@
100.0% in inform7 run
70.3% in compilation to Inter
50.4% in //Sequence::undertake_queued_tasks//
4.5% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
70.8% in compilation to Inter
50.8% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.8% in //ImperativeDefinitions::assess_all//
1.4% in //RTKindConstructors::compile//
1.4% in //RTPhrasebook::compile_entries//
1.0% in //Sequence::lint_inter//
1.2% 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.4% in //MajorNodes::pass_2//
0.4% in //World::stage_V//
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.9% not specifically accounted for
26.3% in running Inter pipeline
0.2% in //World::stages_II_and_III//
2.2% not specifically accounted for
25.9% in running Inter pipeline
10.1% in step 14/15: generate inform6 -> auto.inf
5.8% in step 5/15: load-binary-kits
5.8% in step 6/15: make-synoptic-module
5.4% in step 6/15: make-synoptic-module
1.4% 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.0% not specifically accounted for
1.3% not specifically accounted for
2.6% in supervisor
0.7% not specifically accounted for

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -20,7 +20,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -20,7 +20,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -19,7 +19,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -22,7 +22,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -22,7 +22,7 @@ package main _plain
constant (K_number) C_x = 0x7f2a
constant (K_number) cornelius = dw"frogs"
constant (K_number) gaius = dw"toads"
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -5,24 +5,24 @@ package main _plain
constant VERB_DIRECTIVE_DIVIDER = 1
constant VERB_DIRECTIVE_RESULT = 2
package template _module
splat CONSTANT "Constant DEBUG;\n"
splat CONSTANT "Constant Badger = 12;\n"
splat ROUTINE "[ Falsity; return false; ];\n"
splat ROUTINE "[ Demo x y; return x+y; ];\n"
splat ARRAY "Array XA --> 2 4 56;\n"
splat ARRAY "Array XB--> (71 + 3);\n"
splat ARRAY "Array XC -> 17 91;\n"
splat ARRAY "Array XD-> 8 6;\n"
splat ARRAY "Array XE table 2 3 4 5;\n"
splat ARRAY "Array XF buffer 6 7 8 9;\n"
splat CONSTANT "Constant Bodger $$10011101;\n"
splat CONSTANT "Constant Budger $7fe2 ;\n"
splat GLOBAL "Global nitwit = 2;\n"
splat DEFAULT "Default Bodger = 77;\n"
splat DEFAULT "Default Bydger = 777;\n"
splat STUB "#Stub Banana 2;\n"
splat STUB "#Stub Peach 0;\n"
splat ATTRIBUTE "Attribute marmorial;\n"
splat PROPERTY "Property density;\n"
splat FAKEACTION "Fake_action PluralFound;\n"
splat OBJECT "Object thedark \"(darkness object)\";\n"
splat CONSTANT "" "Constant DEBUG;\n"
splat CONSTANT "" "Constant Badger = 12;\n"
splat ROUTINE "" "[ Falsity; return false; ];\n"
splat ROUTINE "" "[ Demo x y; return x+y; ];\n"
splat ARRAY "" "Array XA --> 2 4 56;\n"
splat ARRAY "" "Array XB--> (71 + 3);\n"
splat ARRAY "" "Array XC -> 17 91;\n"
splat ARRAY "" "Array XD-> 8 6;\n"
splat ARRAY "" "Array XE table 2 3 4 5;\n"
splat ARRAY "" "Array XF buffer 6 7 8 9;\n"
splat CONSTANT "" "Constant Bodger $$10011101;\n"
splat CONSTANT "" "Constant Budger $7fe2 ;\n"
splat GLOBAL "" "Global nitwit = 2;\n"
splat DEFAULT "" "Default Bodger = 77;\n"
splat DEFAULT "" "Default Bydger = 777;\n"
splat STUB "" "#Stub Banana 2;\n"
splat STUB "" "#Stub Peach 0;\n"
splat ATTRIBUTE "" "Attribute marmorial;\n"
splat PROPERTY "" "Property density;\n"
splat FAKEACTION "" "Fake_action PluralFound;\n"
splat OBJECT "" "Object thedark \"(darkness object)\";\n"

View file

@ -1,8 +1,8 @@
package main _plain
package resources _plain
constant Bidger = 20
splat CONSTANT "Constant Badger = 12;\n"
splat CONSTANT "Constant Bodger $$10011101;\n"
splat CONSTANT "Constant Budger $7fe2 ;\n"
splat CONSTANT "" "Constant Badger = 12;\n"
splat CONSTANT "" "Constant Bodger $$10011101;\n"
splat CONSTANT "" "Constant Budger $7fe2 ;\n"
constant Danza = sum{ 2, 34 }
constant Sahara = sum{ Danza, Bidger, 1 }

View file

@ -1,13 +1,13 @@
package main _plain
typename K_colour = enum
instance (K_colour) I_green = 1
splat IFDEF "#ifdef DEBUG;\n"
splat IFDEF "" "#ifdef DEBUG;\n"
instance (K_colour) I_red = 17
splat IFNOT "#ifnot;\n"
splat IFNOT "" "#ifnot;\n"
instance (K_colour) I_turquoise = 17
splat ENDIF "#ENDIF;\n"
splat ENDIF "" "#ENDIF;\n"
instance (K_colour) I_maroon = 4002
constant (K_colour) wallpaper_shade = I_green
splat IFDEF "#ifdef wallpaper_shade;\n"
splat IFDEF "" "#ifdef wallpaper_shade;\n"
instance (K_colour) I_cerise = 28
splat ENDIF " #ENDif ; \n"
splat ENDIF "" " #ENDif ; \n"

View file

@ -1,8 +1,8 @@
package main _plain
typename K_number = int32
constant (K_number) MAGIC = 16339
splat IFTRUE "#iftrue MAGIC == 16339;\n"
splat IFTRUE "" "#iftrue MAGIC == 16339;\n"
constant (K_number) WIZARD = 5
splat IFNOT "#ifnot;\n"
splat IFNOT "" "#ifnot;\n"
constant (K_number) MUGGLE = 0
splat ENDIF "#endif;\n"
splat ENDIF "" "#endif;\n"

View file

@ -1,14 +1,14 @@
package main _plain
package Falsity _code
code
splat "return false;"
splat "" "return false;"
package Demo _code
local x
local y
code
splat "return x+y;"
splat "" "return x+y;"
package Prop_Falsity _code
local reason
local obj
code
splat "return 0;"
splat "" "return 0;"

View file

@ -1,2 +1,2 @@
inter: inter/Tests/Invalid/inversion.intert, line 1: file holds Inter written for specification v0.1.2, but I expect v2.0.0
inter: inter/Tests/Invalid/inversion.intert, line 1: file holds Inter written for specification v0.1.2, but I expect v3.0.0
>--> version 0.1.2

View file

@ -21,7 +21,7 @@ package main _plain
constant (K_number) gaius = dw"toads"
constant emptytext = ""
constant IMPROBABLE_VALUE = 0xdeadce11
splat "Sing a song of \"six splats\"...\nand don't wait up"
splat "" "Sing a song of \"six splats\"...\nand don't wait up"
typename K_colour = enum
instance (K_colour) I_green = 1
instance (K_colour) I_red = 17

View file

@ -21,6 +21,8 @@ We need to itemise the structures we'll want to allocate:
@e inter_schema_node_CLASS
@e inter_schema_token_CLASS
@e schema_parsing_error_CLASS
@e I6_annotation_CLASS
@e I6_annotation_term_CLASS
=
DECLARE_CLASS(hierarchy_location)
@ -36,6 +38,8 @@ DECLARE_CLASS(schema_parsing_error)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_name, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_name_generator, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(I6_annotation, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(I6_annotation_term, 100)
#ifdef CORE_MODULE
MAKE_ANNOTATION_FUNCTIONS(explicit_iname, inter_name)

View file

@ -0,0 +1,178 @@
[I6Annotations::] Inform 6 Annotations.
Parsing Inform 6-syntax annotation markers.
@ Annotations are parsed into the following:
=
typedef struct I6_annotation {
struct text_stream *identifier;
struct linked_list *terms; /* of |I6_annotation_term| */
struct I6_annotation *next;
CLASS_DEFINITION
} I6_annotation;
typedef struct I6_annotation_term {
struct text_stream *key;
struct text_stream *value;
CLASS_DEFINITION
} I6_annotation_term;
@ =
I6_annotation *I6Annotations::new(void) {
I6_annotation *IA = CREATE(I6_annotation);
IA->identifier = Str::new();
IA->terms = NULL;
IA->next = NULL;
return IA;
}
@ Purely syntactic parsing is done with two calls. To see these exercised, try
the |building-test| test case |annotations|.
|I6Annotations::check| returns a character position |i| (counting from 0 at
the start of the text) if it can find a syntactically valid set of annotations
before |i|. Note that this can be the empty set. We return -1 if a purported
annotation appears (i.e., because the first non-whitespace character is |+|)
but what follows is not syntactically valid according to the rules in IE-0006.
Note that we only check syntax, not semantics: all kinds of unknown annotations
would pass this, provided they were properly punctuated.
=
int I6Annotations::check(text_stream *A) {
return I6Annotations::unpack(A, NULL, TRUE);
}
@ |I6Annotations::parse(A)| parses a complete annotation, including its opening
|+| sign but with no junk at the end, into an |I6_annotation|. It returns |NULL|
if a syntax error is reached.
=
I6_annotation *I6Annotations::parse(text_stream *A) {
I6_annotation *IA = I6Annotations::new();
if (I6Annotations::unpack(A, IA, FALSE) == -1) return NULL;
return IA;
}
@ Both use the same simple finite-state-machine parser.
@d NONPLUSSED_I6ASTATE 0 /* waiting for the |+| sign */
@d BEFORE_I6ASTATE 1 /* after the |+| sign, waiting for the identifier */
@d NAME_I6ASTATE 2 /* inside the identifier */
@d AFTER_I6ASTATE 3 /* after the identifier, waiting for another |+| or bracketed data */
@d QUOTED_I6ASTATE 4 /* inside quoted matter */
=
int I6Annotations::unpack(text_stream *A, I6_annotation *IA, int allow_tail) {
int malformed = FALSE, state = NONPLUSSED_I6ASTATE;
int i = 0, name_length = 0;
for (; i<Str::len(A); i++) {
wchar_t c = Str::get_at(A, i);
if (Characters::is_whitespace(c)) {
if (state == BEFORE_I6ASTATE) malformed = TRUE;
if (state == NAME_I6ASTATE) state = AFTER_I6ASTATE;
} else if (c == '+') {
if (state == NONPLUSSED_I6ASTATE) state = BEFORE_I6ASTATE;
else if (state == BEFORE_I6ASTATE) malformed = TRUE;
else if (IA) {
IA->next = I6Annotations::new();
IA = IA->next;
}
state = BEFORE_I6ASTATE;
name_length = 0;
} else if (c == '(') {
if ((state != NAME_I6ASTATE) && (state != AFTER_I6ASTATE)) malformed = TRUE;
state = AFTER_I6ASTATE;
int bl = 1; i++;
TEMPORARY_TEXT(term)
while (i<Str::len(A)) {
wchar_t d = Str::get_at(A, i);
if (state == QUOTED_I6ASTATE) {
if (d == '\\') {
i++; d = Str::get_at(A, i);
} else if (d == '\'') {
wchar_t n = Str::get_at(A, i+1);
if ((Characters::is_whitespace(n) == FALSE) && (n != ',') && (n != ')'))
malformed = TRUE;
state = AFTER_I6ASTATE; i++; continue;
}
PUT_TO(term, d);
} else {
if (d == '\'') {
wchar_t p = Str::get_at(A, i-1);
if ((Characters::is_whitespace(p) == FALSE) && (p != ',') && (p != '('))
malformed = TRUE;
state = QUOTED_I6ASTATE; i++; continue;
}
if (d == '(') bl++;
if (d == ')') bl--;
if ((bl == 1) && (d == ',')) @<Parse term@>
else if (bl > 0) PUT_TO(term, d);
}
if (bl == 0) { @<Parse term@>; break; }
i++;
}
if (state == QUOTED_I6ASTATE) malformed = TRUE;
if (bl != 0) malformed = TRUE;
DISCARD_TEXT(term)
} else {
if (state == NONPLUSSED_I6ASTATE) break;
if (state == AFTER_I6ASTATE) break;
state = NAME_I6ASTATE;
if (name_length++ == 0) {
if ((c != '_') && (Characters::isalpha(c) == FALSE)) malformed = TRUE;
} else {
if ((c != '_') && (Characters::isalnum(c) == FALSE)) malformed = TRUE;
}
if (IA) PUT_TO(IA->identifier, c);
}
}
if (malformed) return -1;
while (Characters::is_whitespace(Str::get_at(A, i))) i++;
if ((allow_tail == FALSE) && (Str::get_at(A, i))) return -1;
if ((allow_tail == FALSE) && (state == NONPLUSSED_I6ASTATE)) return -1;
return i;
}
@<Parse term@> =
if (Str::len(term) > 0) {
text_stream *K = Str::new();
text_stream *V = Str::new();
if (IA) {
I6_annotation_term *term = CREATE(I6_annotation_term);
if (IA->terms == NULL) IA->terms = NEW_LINKED_LIST(I6_annotation_term);
ADD_TO_LINKED_LIST(term, I6_annotation_term, IA->terms);
term->key = K;
term->value = V;
}
for (int k=0, in_key=TRUE; k<Str::len(term); k++) {
wchar_t c = Str::get_at(term, k);
if (Characters::is_whitespace(c)) {
if (in_key) {
if (Str::len(K) == 0) continue;
in_key = FALSE;
}
if (Str::len(V) == 0) continue;
} else if (Characters::isalnum(c) == FALSE) {
in_key = FALSE;
}
if (in_key) PUT_TO(K, c);
else PUT_TO(V, c);
}
Str::clear(term);
if (Str::len(K) == 0) malformed = TRUE;
if (Str::len(V) == 0) {
WRITE_TO(V, "%S", K);
Str::clear(K);
WRITE_TO(K, "_");
}
for (int k=0; k<Str::len(K); k++) {
wchar_t c = Str::get_at(K, k);
if (k == 0) {
if ((c != '_') && (Characters::isalpha(c) == FALSE)) malformed = TRUE;
} else {
if ((c != '_') && (Characters::isalnum(c) == FALSE)) malformed = TRUE;
}
}
}

View file

@ -25,6 +25,7 @@ Chapter 2: Blueprints
Inform 6 Operators
Emitting Inter Schemas
Identifier Finders
Inform 6 Annotations
Chapter 3: Masonry
Produce

View file

@ -26,7 +26,9 @@ void Unit::run(filename *F) {
@e NO_IUT from 0
@e SCHEMA_IUT
@e SCHEMA_WORKINGS_IUT
@e I6_ANNOTATION_IUT
=
typedef struct inter_unit_test {
int to_perform;
struct text_stream *test_input;
@ -40,6 +42,9 @@ void Unit::test_harvester(text_stream *text, text_file_position *tfp, void *v_iu
} else if (Str::eq(text, I"schema-workings")) {
iut->to_perform = SCHEMA_WORKINGS_IUT;
Str::clear(iut->test_input);
} else if (Str::eq(text, I"annotation")) {
iut->to_perform = I6_ANNOTATION_IUT;
Str::clear(iut->test_input);
} else if (Str::eq(text, I"end")) {
switch (iut->to_perform) {
case SCHEMA_WORKINGS_IUT:
@ -50,6 +55,9 @@ void Unit::test_harvester(text_stream *text, text_file_position *tfp, void *v_iu
case SCHEMA_IUT:
@<Perform the schema test@>;
break;
case I6_ANNOTATION_IUT:
@<Perform the annotation test@>;
break;
default: Errors::in_text_file("unimplemented test", tfp); break;
}
iut->to_perform = NO_IUT;
@ -71,3 +79,30 @@ void Unit::test_harvester(text_stream *text, text_file_position *tfp, void *v_iu
else if (sch->node_tree == NULL) LOG("<nodeless scheme\n");
else InterSchemas::log(DL, sch);
LOG("=========\n");
@<Perform the annotation test@> =
LOG("Test: parse annotation from:\n%S\n", iut->test_input);
int verdict = I6Annotations::check(iut->test_input);
if (verdict == -1) {
LOG("Malformed\n");
} else {
TEMPORARY_TEXT(A)
for (int i=0; i<verdict; i++) PUT_TO(A, Str::get_at(iut->test_input, i));
for (I6_annotation *IA = I6Annotations::parse(A); IA; IA = IA->next) {
LOG("Annotation: %S\n", IA->identifier);
if (IA->terms) {
int i = 0;
I6_annotation_term *term;
LOOP_OVER_LINKED_LIST(term, I6_annotation_term, IA->terms) {
LOG("%d: %S = <%S>\n", i++, term->key, term->value);
}
}
}
if (verdict < Str::len(iut->test_input)) {
LOG("Residue: ");
for (int i = verdict; i<Str::len(iut->test_input); i++)
LOG("%c", Str::get_at(iut->test_input, i));
}
DISCARD_TEXT(A)
}
LOG("=========\n");

View file

@ -0,0 +1,103 @@
Test: parse annotation from:
junk
Residue: junk
=========
Test: parse annotation from:
+simple
Annotation: simple
=========
Test: parse annotation from:
+simple+complex(3)
Annotation: simple
Annotation: complex
0: _ = <3>
=========
Test: parse annotation from:
+simple + also Global fish = 1;
Malformed
=========
Test: parse annotation from:
+simple [ Function x y z;
Annotation: simple
Residue: [ Function x y z;
=========
Test: parse annotation from:
+ simple [ Function x y z;
Malformed
=========
Test: parse annotation from:
+simple(with stuff, and other stuff)
Annotation: simple
0: with = <stuff>
1: and = <other stuff>
=========
Test: parse annotation from:
+simple(with)
Annotation: simple
0: _ = <with>
=========
Test: parse annotation from:
+simple(with( x ))
Annotation: simple
0: with = <( x )>
=========
Test: parse annotation from:
+simple(a,b,c,d,e,f,g,h)
Annotation: simple
0: _ = <a>
1: _ = <b>
2: _ = <c>
3: _ = <d>
4: _ = <e>
5: _ = <f>
6: _ = <g>
7: _ = <h>
=========
Test: parse annotation from:
+simple(a,b,c,d,e,f,g,h,i)
Annotation: simple
0: _ = <a>
1: _ = <b>
2: _ = <c>
3: _ = <d>
4: _ = <e>
5: _ = <f>
6: _ = <g>
7: _ = <h>
8: _ = <i>
=========
Test: parse annotation from:
+simple(with 'This text')
Annotation: simple
0: with = <This text>
=========
Test: parse annotation from:
+simple(with 'This \'text\'')
Annotation: simple
0: with = <This 'text'>
=========
Test: parse annotation from:
+simple(with 'This text',also 67)
Annotation: simple
0: with = <This text>
1: also = <67>
=========
Test: parse annotation from:
+simple()
Annotation: simple
=========

View file

@ -0,0 +1,45 @@
annotation
junk
end
annotation
+simple
end
annotation
+simple+complex(3)
end
annotation
+simple + also Global fish = 1;
end
annotation
+simple [ Function x y z;
end
annotation
+ simple [ Function x y z;
end
annotation
+simple(with stuff, and other stuff)
end
annotation
+simple(with)
end
annotation
+simple(with( x ))
end
annotation
+simple(a,b,c,d,e,f,g,h)
end
annotation
+simple(a,b,c,d,e,f,g,h,i)
end
annotation
+simple(with 'This text')
end
annotation
+simple(with 'This \'text\'')
end
annotation
+simple(with 'This text',also 67)
end
annotation
+simple()
end

View file

@ -46,11 +46,16 @@ Inform 10.1.0.
2.0.0 (24 May 2022) introduced a new base type constructor for "activity on T".
This renumbers the binary representation of types, so it is a major not minor bump.
3.0.0 (9 October 2022) added a new optional field to |SPLAT_IST| instructions,
which holds I6 annotations in the sense of Inform evolution proposal IE-0006.
Note that these are not Inter annotations, which apply to symbols: these apply
to directives.
@ Anyway, the implementation, such as it is:
=
semantic_version_number InterVersion::current(void) {
semantic_version_number V = VersionNumbers::from_text(I"2.0.0");
semantic_version_number V = VersionNumbers::from_text(I"3.0.0");
if (VersionNumbers::is_null(V)) internal_error("malformed version number");
return V;
}

View file

@ -64,6 +64,7 @@ The set of annotations used by the Inform tool suite is as follows.
@e ASSIMILATED_IANN
@e FAKE_ACTION_IANN
@e OBJECT_IANN
@e PRIVATE_IANN
@e C_ARRAY_ADDRESS_IANN
@e I6_GLOBAL_OFFSET_IANN
@ -72,6 +73,7 @@ The set of annotations used by the Inform tool suite is as follows.
@e APPEND_IANN
@e INNER_PROPERTY_NAME_IANN
@e TRANSLATION_IANN
@e REPLACING_IANN
@ The special annotation |__invalid|, with ID |INVALID_IANN|, is never given to
any symbol: it's used to mean "do not make an annotation".
@ -83,10 +85,12 @@ void SymbolAnnotation::declare_canonical_annotations(void) {
SymbolAnnotation::declare(ASSIMILATED_IANN, I"__assimilated", BOOLEAN_IATYPE);
SymbolAnnotation::declare(FAKE_ACTION_IANN, I"__fake_action", BOOLEAN_IATYPE);
SymbolAnnotation::declare(OBJECT_IANN, I"__object", BOOLEAN_IATYPE);
SymbolAnnotation::declare(PRIVATE_IANN, I"__private", BOOLEAN_IATYPE);
SymbolAnnotation::declare(APPEND_IANN, I"__append", TEXTUAL_IATYPE);
SymbolAnnotation::declare(INNER_PROPERTY_NAME_IANN, I"__inner_property_name", TEXTUAL_IATYPE);
SymbolAnnotation::declare(TRANSLATION_IANN, I"__translation", TEXTUAL_IATYPE);
SymbolAnnotation::declare(REPLACING_IANN, I"__replacing", TEXTUAL_IATYPE);
SymbolAnnotation::declare(C_ARRAY_ADDRESS_IANN, I"__array_address", INTEGER_IATYPE);
SymbolAnnotation::declare(I6_GLOBAL_OFFSET_IANN, I"__global_offset", INTEGER_IATYPE);

View file

@ -436,6 +436,22 @@ text_stream *InterSymbol::trans(inter_symbol *S) {
return InterSymbol::identifier(S);
}
@h Replacement.
=
void InterSymbol::set_replacement(inter_symbol *S, text_stream *from) {
if (S == NULL) internal_error("no symbol");
if (InterSymbol::is_metadata_key(S) == FALSE)
SymbolAnnotation::set_t(InterPackage::tree(InterSymbol::package(S)),
InterSymbol::package(S), S, REPLACING_IANN, from);
}
text_stream *InterSymbol::get_replacement(inter_symbol *S) {
if (S == NULL) internal_error("no symbol");
return SymbolAnnotation::get_t(S,
InterPackage::tree(InterSymbol::package(S)), REPLACING_IANN);
}
@h Logging.
=

View file

@ -8,8 +8,8 @@ For what this does and why it is used, see //inter: Textual Inter//.
=
void SplatInstruction::define_construct(void) {
inter_construct *IC = InterInstruction::create_construct(SPLAT_IST, I"splat");
InterInstruction::specify_syntax(IC, I"splat OPTIONALIDENTIFIER TEXT");
InterInstruction::data_extent_always(IC, 2);
InterInstruction::specify_syntax(IC, I"splat OPTIONALIDENTIFIER TEXT TEXT");
InterInstruction::data_extent_always(IC, 3);
InterInstruction::allow_in_depth_range(IC, 0, INFINITELY_DEEP);
InterInstruction::permit(IC, OUTSIDE_OF_PACKAGES_ICUP);
InterInstruction::permit(IC, INSIDE_PLAIN_PACKAGE_ICUP);
@ -24,15 +24,18 @@ void SplatInstruction::define_construct(void) {
In bytecode, the frame of a |splat| instruction is laid out with the
compulsory words -- see //Inter Nodes// -- followed by:
@d MATTER_SPLAT_IFLD (DATA_IFLD + 0)
@d PLM_SPLAT_IFLD (DATA_IFLD + 1)
@d MATTER_SPLAT_IFLD (DATA_IFLD + 0)
@d PLM_SPLAT_IFLD (DATA_IFLD + 1)
@d I6ANNOTATION_SPLAT_IFLD (DATA_IFLD + 2)
=
inter_error_message *SplatInstruction::new(inter_bookmark *IBM, text_stream *splatter,
inter_ti plm, inter_ti level, inter_error_location *eloc) {
inter_tree_node *P = Inode::new_with_2_data_fields(IBM, SPLAT_IST,
/* MATTER_SPLAT_IFLD: */ InterWarehouse::create_text_at(IBM, splatter),
/* PLM_SPLAT_IFLD: */ plm,
inter_ti plm, text_stream *annotation, inter_ti level, inter_error_location *eloc) {
inter_tree_node *P = Inode::new_with_3_data_fields(IBM, SPLAT_IST,
/* MATTER_SPLAT_IFLD: */ InterWarehouse::create_text_at(IBM, splatter),
/* PLM_SPLAT_IFLD: */ plm,
/* I6ANNOTATION_SPLAT_IFLD: */
(Str::len(annotation) > 0)?(InterWarehouse::create_text_at(IBM, annotation)):0,
eloc, level);
inter_error_message *E = VerifyingInter::instruction(InterBookmark::package(IBM), P);
if (E) return E;
@ -56,6 +59,10 @@ void SplatInstruction::verify(inter_construct *IC, inter_tree_node *P,
*E = Inode::error(P, I"plm out of range", NULL);
return;
}
if (P->W.instruction[I6ANNOTATION_SPLAT_IFLD]) {
*E = VerifyingInter::text_field(owner, P, I6ANNOTATION_SPLAT_IFLD);
if (*E) return;
}
}
@h Creating from textual Inter syntax.
@ -64,7 +71,8 @@ void SplatInstruction::verify(inter_construct *IC, inter_tree_node *P,
void SplatInstruction::read(inter_construct *IC, inter_bookmark *IBM,
inter_line_parse *ilp, inter_error_location *eloc, inter_error_message **E) {
text_stream *plm_text = ilp->mr.exp[0];
text_stream *splatter_text = ilp->mr.exp[1];
text_stream *annot_text = ilp->mr.exp[1];
text_stream *splatter_text = ilp->mr.exp[2];
inter_ti plm = SplatInstruction::parse_plm(plm_text);
if (SplatInstruction::plm_valid(plm) == FALSE) {
@ -72,9 +80,14 @@ void SplatInstruction::read(inter_construct *IC, inter_bookmark *IBM,
return;
}
TEMPORARY_TEXT(raw)
TEMPORARY_TEXT(raw_annot)
*E = TextualInter::parse_literal_text(raw, splatter_text, 0, Str::len(splatter_text), eloc);
if (*E == NULL)
*E = SplatInstruction::new(IBM, raw, plm, (inter_ti) ilp->indent_level, eloc);
if (*E == NULL) {
*E = TextualInter::parse_literal_text(raw_annot, annot_text, 0, Str::len(annot_text), eloc);
if (*E == NULL) {
*E = SplatInstruction::new(IBM, raw, plm, raw_annot, (inter_ti) ilp->indent_level, eloc);
}
}
DISCARD_TEXT(raw)
}
@ -84,6 +97,8 @@ void SplatInstruction::read(inter_construct *IC, inter_bookmark *IBM,
void SplatInstruction::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node *P) {
WRITE("splat ");
SplatInstruction::write_plm(OUT, SplatInstruction::plm(P));
TextualInter::write_text(OUT, SplatInstruction::I6_annotation(P));
WRITE(" ");
TextualInter::write_text(OUT, SplatInstruction::splatter(P));
}
@ -102,6 +117,12 @@ text_stream *SplatInstruction::splatter(inter_tree_node *P) {
return Inode::ID_to_text(P, P->W.instruction[MATTER_SPLAT_IFLD]);
}
text_stream *SplatInstruction::I6_annotation(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[I6ANNOTATION_SPLAT_IFLD]);
}
@h PLMs.
At some point PLM stood for something, but what it was is now forgotten --
perhaps "parse linked matter"? -- so it is now a nonsense-word pronounced

View file

@ -724,6 +724,9 @@ These have package types |_function| and |_code| respectively.
if (Wiring::find_socket(InterBookmark::tree(IBM), identifier) == NULL)
Wiring::socket(InterBookmark::tree(IBM), identifier,
PackageInstruction::name_symbol(IP));
CompileSplatsStage::apply_annotations(
SplatInstruction::I6_annotation(P), PackageInstruction::name_symbol(IP));
inter_bookmark inner_save = InterBookmark::snapshot(IBM);
InterBookmark::move_into_package(IBM, IP);
inter_bookmark block_bookmark = InterBookmark::snapshot(IBM);
@ -758,6 +761,38 @@ These have package types |_function| and |_code| respectively.
inter_ti B = (inter_ti) InterBookmark::baseline(IBM) + 1;
CompileSplatsStage::function_body(css, IBM, IP, B, body, block_bookmark, identifier);
@h Inform 6 annotations.
=
void CompileSplatsStage::apply_annotations(text_stream *A, inter_symbol *S) {
if (Str::len(A) > 0) {
LOGIF(INTER_CONNECTORS, "Trying to apply '%S' to $3\n", A, S);
for (I6_annotation *IA = I6Annotations::parse(A); IA; IA = IA->next) {
if (Str::eq_insensitive(IA->identifier, I"private")) {
if ((IA->terms == NULL) || (LinkedLists::len(IA->terms) == 0))
SymbolAnnotation::set_b(S, PRIVATE_IANN, TRUE);
else
PipelineErrors::kit_error("the +private annotation does not take any terms", NULL);
} else if (Str::eq_insensitive(IA->identifier, I"replacing")) {
text_stream *from = I"_";
if (IA->terms) {
I6_annotation_term *term;
LOOP_OVER_LINKED_LIST(term, I6_annotation_term, IA->terms)
if (Str::eq_insensitive(term->key, I"from"))
from = term->value;
else
PipelineErrors::kit_error(
"the +replacing annotation does not take the term '%S'", term->key);
}
InterSymbol::set_replacement(S, from);
} else {
PipelineErrors::kit_error(
"annotation not recognised", IA->identifier);
}
}
}
}
@h Plumbing.
Some convenient Inter utilities.

View file

@ -271,18 +271,36 @@ Note that this function empties the splat buffer |R| before exiting.
=
void ParsingStages::splat(text_stream *R, simple_tangle_docket *docket) {
if (Str::len(R) > 0) {
TEMPORARY_TEXT(A)
@<Find annotation, if any@>;
inter_ti I6_dir = 0;
@<Find directive@>;
if (I6_dir != WHITESPACE_PLM) {
inter_bookmark *IBM = (inter_bookmark *) docket->state;
PUT_TO(R, '\n');
Produce::guard(SplatInstruction::new(IBM, R, I6_dir,
Produce::guard(SplatInstruction::new(IBM, R, I6_dir, A,
(inter_ti) (InterBookmark::baseline(IBM) + 1), NULL));
} else if (A) {
(*(docket->error_callback))(
"this annotation seems not to apply to any directive: '%S'", A);
}
Str::clear(R);
DISCARD_TEXT(A)
}
}
@<Find annotation, if any@> =
int verdict = I6Annotations::check(R);
if (verdict == -1) {
(*(docket->error_callback))(
"this Inform 6 annotation is malformed: '%S'", R);
} else {
for (int i=0; i<verdict; i++) PUT_TO(A, Str::get_at(R, i));
Str::trim_white_space(A);
Str::delete_n_characters(R, verdict);
}
@ A |SPLAT_IST| node should record which sort of Inform 6 directive it contains,
assuming we know that. We will recognise only the following set, and use |MYSTERY_PLM|
for anything else. If the splat doesn't appear to be a directive at all, we leave

View file

@ -91,19 +91,26 @@ regular users: it would be quite slow to read in.
}
@<A clash of definitions seems to have occurred@> =
LOGIF(INTER_CONNECTORS, "Rival definitions of '%S':\nkit: $3\ntree: $3\n",
LOGIF(INTER_CONNECTORS, "Rival definitions of '%S':\ntree: $3\nkit: $3\n",
defn_name, rival_end, Wiring::cable_end(S));
int override = FALSE;
int override = NOT_APPLICABLE;
linked_list *L = step->pipeline->ephemera.replacements_list[step->tree_argument];
text_stream *N;
LOOP_OVER_LINKED_LIST(N, text_stream, L)
if (Str::eq(N, defn_name)) override = TRUE;
if (override == FALSE) {
int tree_replaces = LoadBinaryKitsStage::replaces(rival_end, Wiring::cable_end(S));
int kit_replaces = LoadBinaryKitsStage::replaces(Wiring::cable_end(S), rival_end);
if (tree_replaces) LOGIF(INTER_CONNECTORS, "$3 replaces $3\n", rival_end, Wiring::cable_end(S));
if (kit_replaces) LOGIF(INTER_CONNECTORS, "$3 replaces $3\n", Wiring::cable_end(S), rival_end);
if ((tree_replaces) && (kit_replaces == FALSE)) override = TRUE;
if ((tree_replaces == FALSE) && (kit_replaces == TRUE)) override = FALSE;
if (override == NOT_APPLICABLE) {
int r_val = ConstantInstruction::evaluate_to_int(rival_end);
int s_val = ConstantInstruction::evaluate_to_int(sidecar_end);
if ((r_val == s_val) && (r_val != -1)) override = TRUE;
}
if (override) @<Override the new definition with the existing one@>
if (override == TRUE) @<Override the new definition with the existing one@>
else if (override == FALSE) @<Override the existing definition with the new one@>
else @<Throw an error for the duplication@>;
@ The following (unfortunately) has to do something subtle. We need the definition
@ -136,6 +143,26 @@ the symbols table dictionary.
LOGIF(INTER_CONNECTORS, "Kit defn symbol $3 ~~> $3\n",
sidecar_end, Wiring::cable_end(sidecar_end));
@<Override the existing definition with the new one@> =
inter_package *main_connectors =
LargeScale::connectors_package_if_it_exists(I);
if (main_connectors) {
inter_symbols_table *T = InterPackage::scope(main_connectors);
if (InterSymbolsTable::unname(T, defn_name) == FALSE)
internal_error("cannot strike socket name");
}
inter_symbol *plug = Wiring::plug(I, defn_name);
InterSymbol::strike_definition(rival_end);
Wiring::wire_to(rival_end, plug);
LOGIF(INTER_CONNECTORS, "S = $3\n", S);
LOGIF(INTER_CONNECTORS, "plug = $3\n", plug);
LOGIF(INTER_CONNECTORS, "rival_end = $3\n", rival_end);
Wiring::wire_to(plug, S);
LOGIF(INTER_CONNECTORS, "After overriding the tree definition, we have:\n");
LOGIF(INTER_CONNECTORS, "A new plug $3\n", plug);
LOGIF(INTER_CONNECTORS, "Tree defn symbol $3 ~~> $3\n",
rival_end, Wiring::cable_end(rival_end));
@<Throw an error for the duplication@> =
TEMPORARY_TEXT(E)
WRITE_TO(E,
@ -156,3 +183,17 @@ of the sidecar and put it into the main tree.
internal_error("unable to find attachment point package");
}
Transmigration::move(pack, LargeScale::main_package(I), FALSE);
@
=
int LoadBinaryKitsStage::replaces(inter_symbol *X, inter_symbol *Y) {
text_stream *X_rep = InterSymbol::get_replacement(X);
if (Str::eq(X_rep, I"_")) return TRUE;
inter_package *P = InterSymbolsTable::package(Y->owning_table);
while (P) {
if (Str::eq(X_rep, InterPackage::name(P))) return TRUE;
P = InterPackage::parent(P);
}
return FALSE;
}

View file

@ -12,6 +12,63 @@ releases on 10.1: we're currently at 10.1.2.
## News items
### First evolution proposals implemented (9 October 2022)
Quite a few evolution proposals have now been stacked up, but the first few
are beginning to be implemented. As this is done, so the proposals are also
being slightly rewritten, because there's nothing like implementing a specification
for finding out what's wrong with it.
None of these are part of a release yet, so the only way to experiment with
them is by pulling and building the `master` branch to make your own command-line
tools.
* [IE-0006 New annotations for I6 syntax](https://github.com/ganelson/inform-evolution/blob/main/proposals/0006-i6-syntax-annotations.md)
has an unusual status, since it's really just a syntax for how to augment the I6
language should any augmentations be wanted, rather than a proposal actually to
do so. However, the syntax has been made more explicit now, and the `building`
module of `inter` now implements reading these annotations.
As a tentative test, the `+replacing` annotation for I6 functions has now been
implemented. So for example, placing this function in (say) `ExampleKit`...
+replacing [ SquareRoot num;
"Nobody cares about square roots, son.";
];
...causes it to replace the more arithmetical definition of a function with
the same name in `BasicInformKit`. Equally, source text for a project could say:
Include (-
+replacing [ SquareRoot num;
"Nobody cares about square roots, son.";
];
-).
(Note that this use of `Include` does not end with `replacing "SquareRoot"`,
the previous best way to do this.) Either way, given something like:
When play begins:
showme the square root of 100.
the story should compile and say:
"square root of 100" = number: Nobody cares about square roots, son.
1
rather than, as it otherwise would,
"square root of 100" = number: 10
At present this works only for functions.
* [IE-0009 Dialogue Sections](https://github.com/ganelson/inform-evolution/blob/main/proposals/0009-dialogue-sections.md)
is almost completely implemented, but not yet documented (except that the proposal
is now very detailed, and will likely become a new chapter of Writing with Inform).
* [IE-0010 Concepts](https://github.com/ganelson/inform-evolution/blob/main/proposals/0010-concepts.md)
is implemented too. IE-0009 requires IE-0010, but not vice versa.
### Refactoring of "plugins" to "compiler features" (1 September 2022)
Inform has for many years had internally named "plugins" providing optional

View file

@ -1,5 +1,5 @@
Size of lexicon: 3118 excerpt meanings
Stored among 844 words out of total vocabulary of 10646
Stored among 844 words out of total vocabulary of 10663
714 words have a start list: longest belongs to report (with 293 meanings)
15 words have an end list: longest belongs to case (with 6 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)