1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/building-module/2-is.html
Graham Nelson 1268a0f40e Colonised
2020-04-14 17:56:54 +01:00

3535 lines
720 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Inter Schemas</title>
<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="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-src/Figures/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="index.html"><span class="selectedlink">building</span></a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Shared Modules</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Inter Schemas' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.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>Inter Schemas</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definition. </b>An inter schema is a set of instructions for compiling inter code, while
interspersing certain values at given places.
</p>
<p class="inwebparagraph">The main use of this is for compiling invocations of inline-defined phrases.
For example, the phrase definition:
</p>
<blockquote>
<p>To adjust (N - a number): (- AdjustThis({N}, 1); -).</p>
</blockquote>
<p class="inwebparagraph">results in an inter schema being compiled from this text:
</p>
<pre class="display">
<span class="identifier">AdjustThis</span><span class="plain">({</span><span class="identifier">N</span><span class="plain">}, </span><span class="constant">1</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">The notation here is essentially Inform 6 code with a few special features
in braces: here, <code class="display"><span class="extract">{N}</span></code>, which expands to the value of the token <code class="display"><span class="extract">N</span></code> mentioned
in the phrase preamble. The notation being basically I6 was very convenient
in the years 2004-17, when Inform generated only I6 code: it became more
problematic in 2018. The task then was to generate inter instructions, even
though those would then usually be converted back into I6 anyway.
</p>
<p class="inwebparagraph">And so the code in this section was written. The first half amounts to a
miniature Inform 6 compiler: its task is to take text such as
</p>
<pre class="display">
<span class="identifier">AdjustThis</span><span class="plain">({</span><span class="identifier">N</span><span class="plain">}, </span><span class="constant">1</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph">and convert that into an inter schema. The second half is a code generator,
which takes a given schema and generates inter code from it.
</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Anatomy of a schema. </b>Relatively few inter schemas are generated during Inform's run (typically a
few hundred), so they do not need to be stored compactly or compiled quickly.
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">converted_from</span><span class="plain">; </span><span class="comment"> copy of the source notation</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">node_tree</span><span class="plain">; </span><span class="comment"> the structure</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mid_case</span><span class="plain">; </span><span class="comment"> does this seem to be used inside a switch case?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dereference_mode</span><span class="plain">; </span><span class="comment"> emit from this in dereference-pointers mode</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_schema</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_schema is accessed in 2/eis and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="functiontext">InterSchemas::new<button class="popup" onclick="togglePopup('usagePopup131')">...<span class="popuptext" id="usagePopup131">Usage of <b>InterSchemas::new</b>:<br><a href="#SP20">&#167;20</a></span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">source</span><span class="plain">) {</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_schema</span><span class="plain">);</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">converted_from</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">source</span><span class="plain">);</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">mid_case</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">dereference_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">sch</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>A schema is a connected tree of nodes, each of which has one of the
following types. (Tempting to mark eliminated nodes as <code class="display"><span class="extract">OH_NO_IT_ISNT</span></code>,
but the need to do this went away.)
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">EXPRESSION_ISNT</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">CODE_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">EVAL_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">STATEMENT_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">OPERATION_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">SUBEXPRESSION_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">DIRECTIVE_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">ASSEMBLY_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">LABEL_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALL_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE_ISNT</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">parent_schema</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">parent_node</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">next_node</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">node_marked</span><span class="plain">; </span><span class="comment"> used fleetingly during traverses</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">isn_type</span><span class="plain">; </span><span class="comment"> one of the <code class="display"><span class="extract">*_ISNT</span></code> values</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">isn_clarifier</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">STATEMENT_ISNT</span></code> and <code class="display"><span class="extract">OPERATION_ISNT</span></code> only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dir_clarifier</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">DIRECTIVE_ISNT</span></code> only</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">expression_tokens</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">EXPRESSION_ISNT</span></code> only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">semicolon_terminated</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">EXPRESSION_ISNT</span></code> only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unclosed</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">CODE_ISNT</span></code> only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unopened</span><span class="plain">; </span><span class="comment"> for <code class="display"><span class="extract">CODE_ISNT</span></code> only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">blocked_by_conditional</span><span class="plain">; </span><span class="comment"> used in code generation</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_schema_node</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_schema_node is accessed in 2/eis and here.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="functiontext">InterSchemas::new_node<button class="popup" onclick="togglePopup('usagePopup132')">...<span class="popuptext" id="usagePopup132">Usage of <b>InterSchemas::new_node</b>:<br><a href="#SP7">&#167;7</a>, <a href="#SP15">&#167;15</a>, <a href="#SP22">&#167;22</a>, <a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, <a href="#SP25">&#167;25</a>, <a href="#SP26">&#167;26</a>, <a href="#SP27">&#167;27</a>, <a href="#SP28">&#167;28</a>, <a href="#SP28_1_1">&#167;28.1.1</a>, <a href="#SP29">&#167;29</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">isnt</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain"> = </span><span class="identifier">sch</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="identifier">isnt</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">dir_clarifier</span><span class="plain"> = -1;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unclosed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unopened</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">blocked_by_conditional</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Ordinarily, a <code class="display"><span class="extract">CODE_ISNT</span></code> node represents a complete block of I6 code.
For example, in
</p>
<pre class="display">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) { </span><span class="reserved">print</span><span class="plain"> </span><span class="string">"Hello!"</span><span class="plain">; }</span>
</pre>
<p class="inwebparagraph">the print statement occurs inside a complete block, which will eventually
be represented as a <code class="display"><span class="extract">CODE_ISNT</span></code>. But some inline phrase definitions leave
blocks half-open. For example,
</p>
<pre class="display">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph">is a legal phrase definition: we read it as
</p>
<pre class="display">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">x</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
</pre>
<p class="inwebparagraph">and the schema has to contain a <code class="display"><span class="extract">CODE_ISNT</span></code> marked as having been left
unclosed. Similarly, some definitions close an I6 block which is assumed
as having been opened by an earlier phrase invocation.
</p>
<p class="inwebparagraph">Here we mark a code node as being unclosed. Clearly, if a node is unclosed
then any parent code nodes of it must also be unclosed, so we recurse
upwards.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::mark_unclosed<button class="popup" onclick="togglePopup('usagePopup133')">...<span class="popuptext" id="usagePopup133">Usage of <b>InterSchemas::mark_unclosed</b>:<br><a href="#SP22">&#167;22</a>, <a href="#SP24">&#167;24</a>, <a href="#SP28">&#167;28</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">CODE_ISNT</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unclosed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>The situation with unopened nodes is different: we must ensure that a
single code node is left unopened, even if we have to create a code node
at the top of the tree to serve that role.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::mark_unopened<button class="popup" onclick="togglePopup('usagePopup134')">...<span class="popuptext" id="usagePopup134">Usage of <b>InterSchemas::mark_unopened</b>:<br><a href="#SP22">&#167;22</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">CODE_ISNT</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unopened</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">top</span><span class="plain"> = </span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">code_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">CODE_ISNT</span><span class="plain">);</span>
<span class="identifier">code_isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain"> = </span><span class="identifier">top</span><span class="plain">;</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> = </span><span class="identifier">code_isn</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">top</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">)</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">code_isn</span><span class="plain">;</span>
<span class="identifier">code_isn</span><span class="plain">-&gt;</span><span class="identifier">unopened</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b>A further complication is that some schemas arise from definitions used
only in the middle of switch statements; they contain neither the start nor
the end of the construct, so the above mechanisms are not sufficient.
For example, the inline definition
</p>
<pre class="display">
<span class="plain">{</span><span class="identifier">X</span><span class="plain">}:</span>
</pre>
<p class="inwebparagraph">implies, by use of the colon, that it's a switch case. We can't conveniently
associate this with any single node, so we mark the schema as a whole.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::mark_case_closed<button class="popup" onclick="togglePopup('usagePopup135')">...<span class="popuptext" id="usagePopup135">Usage of <b>InterSchemas::mark_case_closed</b>:<br><a href="#SP24">&#167;24</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">-&gt;</span><span class="element">mid_case</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b><code class="display"><span class="extract">EXPRESSION_ISNT</span></code> nodes carry a linked list of tokens with them. When we
begin compiling a schema, we form a single expression node with a long list
of tokens: gradually this is transformed into a tree of nodes with more,
but much shorter, expression nodes, and in the process most of the token
types are eliminated. The following types are present only during the
compilation process, and never survive into the final schema:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">RAW_ISTT</span><span class="definitionkeyword"> from </span><span class="constant">1</span> <span class="comment"> something unidentified as yet</span>
<span class="definitionkeyword">enum</span> <span class="constant">WHITE_SPACE_ISTT</span><span class="plain"> </span><span class="comment"> a stretch of white space</span>
<span class="definitionkeyword">enum</span> <span class="constant">RESERVED_ISTT</span><span class="plain"> </span><span class="comment"> am I6 reserved word such as <code class="display"><span class="extract">while</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">OPERATOR_ISTT</span><span class="plain"> </span><span class="comment"> an I6 operator such as <code class="display"><span class="extract">--&gt;</span></code> or <code class="display"><span class="extract">+</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">DIVIDER_ISTT</span><span class="plain"> </span><span class="comment"> a semicolon used to divide I6 statements</span>
<span class="definitionkeyword">enum</span> <span class="constant">OPEN_ROUND_ISTT</span><span class="plain"> </span><span class="comment"> open round bracket</span>
<span class="definitionkeyword">enum</span> <span class="constant">CLOSE_ROUND_ISTT</span><span class="plain"> </span><span class="comment"> close round bracket</span>
<span class="definitionkeyword">enum</span> <span class="constant">OPEN_BRACE_ISTT</span><span class="plain"> </span><span class="comment"> open brace bracket</span>
<span class="definitionkeyword">enum</span> <span class="constant">CLOSE_BRACE_ISTT</span><span class="plain"> </span><span class="comment"> close brace bracket</span>
<span class="definitionkeyword">enum</span> <span class="constant">COMMA_ISTT</span><span class="plain"> </span><span class="comment"> comma</span>
<span class="definitionkeyword">enum</span> <span class="constant">COLON_ISTT</span><span class="plain"> </span><span class="comment"> colon</span>
</pre>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>Whereas these token types do make it into the compiled schema:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">IDENTIFIER_ISTT</span><span class="plain"> </span><span class="comment"> an I6 identifier such as <code class="display"><span class="extract">my_var12</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">OPCODE_ISTT</span><span class="plain"> </span><span class="comment"> an Inform assembly language opcode such as <code class="display"><span class="extract">@pull</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">DIRECTIVE_ISTT</span><span class="plain"> </span><span class="comment"> an Inform compiler directive such as <code class="display"><span class="extract">#iftrue</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">NUMBER_ISTT</span><span class="plain"> </span><span class="comment"> a constant number</span>
<span class="definitionkeyword">enum</span> <span class="constant">BIN_NUMBER_ISTT</span><span class="plain"> </span><span class="comment"> a constant number</span>
<span class="definitionkeyword">enum</span> <span class="constant">HEX_NUMBER_ISTT</span><span class="plain"> </span><span class="comment"> a constant number</span>
<span class="definitionkeyword">enum</span> <span class="constant">REAL_NUMBER_ISTT</span><span class="plain"> </span><span class="comment"> a constant number</span>
<span class="definitionkeyword">enum</span> <span class="constant">DQUOTED_ISTT</span><span class="plain"> </span><span class="comment"> a constant piece of text <code class="display"><span class="extract">"like this"</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">SQUOTED_ISTT</span><span class="plain"> </span><span class="comment"> a constant piece of text such as <code class="display"><span class="extract">'x'</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">I7_ISTT</span><span class="plain"> </span><span class="comment"> I7 material in <code class="display"><span class="extract">(+ ... +)</span></code> notation</span>
<span class="definitionkeyword">enum</span> <span class="constant">INLINE_ISTT</span><span class="plain"> </span><span class="comment"> an inline command such as <code class="display"><span class="extract">{-my:1}</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">ASM_ARROW_ISTT</span><span class="plain"> </span><span class="comment"> the arrow sign <code class="display"><span class="extract">-&gt;</span></code> used in assembly language only</span>
<span class="definitionkeyword">enum</span> <span class="constant">ASM_SP_ISTT</span><span class="plain"> </span><span class="comment"> the stack pointer pseudo-variable <code class="display"><span class="extract">sp</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">ASM_LABEL_ISTT</span><span class="plain"> </span><span class="comment"> the label sign <code class="display"><span class="extract">?</span></code> used in assembly language only</span>
<span class="definitionkeyword">enum</span> <span class="constant">ASM_NEGATED_LABEL_ISTT</span><span class="plain"> </span><span class="comment"> the label sign <code class="display"><span class="extract">?~</span></code> used in assembly language only</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_token</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">; </span><span class="comment"> these form a linked list attached to the owner node</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">next</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ist_type</span><span class="plain">; </span><span class="comment"> one of the <code class="display"><span class="extract">*_ISTT</span></code> values above</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">; </span><span class="comment"> textual form of token</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">operation_primitive</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">OPERATOR_ISTT</span></code> only: e.g. <code class="display"><span class="extract">PLUS_BIP</span></code> for <code class="display"><span class="extract">+</span></code></span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">reserved_word</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">RESERVED_ISTT</span></code> only: which one</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">constant_number</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">NUMBER_ISTT</span></code> only: if non-negative, value of number</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">as_quoted</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">IDENTIFIER_ISTT</span></code> only: the identified symbol if known</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inline_command</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">INLINE_ISTT</span></code> only: one of the <code class="display"><span class="extract">*_ISINC</span></code> values</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inline_modifiers</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inline_subcommand</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">INLINE_ISTT</span></code> only: one of the <code class="display"><span class="extract">*_ISINSC</span></code> values</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">bracing</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">operand</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">operand2</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">property</span><span class="plain"> *</span><span class="identifier">extremal_property</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">extremal_property_sign</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">preinsert</span><span class="plain">; </span><span class="comment"> fleeting markers only</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">postinsert</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_schema_token</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_schema_token is accessed in 2/eis and here.</p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b></p>
<pre class="display">
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="functiontext">InterSchemas::new_token<button class="popup" onclick="togglePopup('usagePopup136')">...<span class="popuptext" id="usagePopup136">Usage of <b>InterSchemas::new_token</b>:<br><a href="#SP20_2_2">&#167;20.2.2</a>, <a href="#SP20_2_3_1">&#167;20.2.3.1</a>, <a href="#SP20_2_4_1">&#167;20.2.4.1</a>, <a href="#SP20_2_5">&#167;20.2.5</a>, <a href="#SP20_2_2_1_4">&#167;20.2.2.1.4</a>, <a href="#SP21">&#167;21</a>, <a href="#SP26">&#167;26</a>, <a href="#SP29">&#167;29</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">type</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">operation_primitive</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">reserved_word</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_schema_token</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="identifier">type</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">material</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand2</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="comment"> that is, none given</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property_sign</span><span class="plain"> = </span><span class="identifier">MEASURE_T_EXACTLY</span><span class="plain">; </span><span class="comment"> that is, none given</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">no_ISINC</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">no_ISINSC</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> = </span><span class="identifier">operation_primitive</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">as_quoted</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> = </span><span class="identifier">reserved_word</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">constant_number</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">preinsert</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b>The value of <code class="display"><span class="extract">reserved_word</span></code>, in a <code class="display"><span class="extract">RESERVED_ISTT</span></code> node, must be one of:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">IF_I6RW</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">ELSE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">STYLE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RETURN_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RTRUE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RFALSE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">FOR_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">OBJECTLOOP_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">WHILE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">DO_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">UNTIL_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PRINT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">PRINTRET_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">NEWLINE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">GIVE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">MOVE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">REMOVE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">JUMP_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SWITCH_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">DEFAULT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">FONT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">BREAK_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONTINUE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">QUIT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RESTORE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SPACES_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">READ_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">INVERSION_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFDEF_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFNDEF_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFTRUE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFFALSE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFNOT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">ENDIF_I6RW</span>
</pre>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>The value of <code class="display"><span class="extract">inline_command</span></code>, in an <code class="display"><span class="extract">INLINE_ISTT</span></code> node, must be one of:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">no_ISINC</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">primitive_definition_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">new_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">new_list_of_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">printing_routine_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">next_routine_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">previous_routine_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">ranger_routine_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">strong_kind_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">weak_kind_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">backspace_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">erase_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">open_brace_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">close_brace_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">label_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">counter_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">counter_storage_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">counter_up_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">counter_down_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">counter_makes_array_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">by_reference_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">by_reference_blank_out_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">reference_exists_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">lvalue_by_reference_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">by_value_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">box_quotation_text_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">try_action_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">try_action_silently_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">return_value_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">return_value_from_rule_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">property_holds_block_value_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">mark_event_used_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">my_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">unprotect_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">copy_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">initialise_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">matches_description_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">now_matches_description_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">arithmetic_operation_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">say_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">show_me_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">segment_count_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">final_segment_marker_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">list_together_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">rescale_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">unknown_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">substitute_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">current_sentence_ISINC</span>
<span class="definitionkeyword">enum</span> <span class="constant">combine_ISINC</span>
</pre>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b>The value of <code class="display"><span class="extract">inline_subcommand</span></code>, in an <code class="display"><span class="extract">INLINE_ISTT</span></code> node, must be one of:
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">no_ISINSC</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">unarticled_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">articled_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">repeat_through_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">repeat_through_list_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">number_of_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">random_of_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">total_of_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">extremal_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">function_application_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">description_application_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">solve_equation_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">switch_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">break_ISINSC</span>
<span class="definitionkeyword">enum</span> <span class="constant">verbose_checking_ISINSC</span>
</pre>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Token insertion. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::add_token<button class="popup" onclick="togglePopup('usagePopup137')">...<span class="popuptext" id="usagePopup137">Usage of <b>InterSchemas::add_token</b>:<br><a href="#SP20_2_2">&#167;20.2.2</a>, <a href="#SP20_2_3_1">&#167;20.2.3.1</a>, <a href="#SP20_2_4_1">&#167;20.2.4.1</a>, <a href="#SP20_2_5">&#167;20.2.5</a>, <a href="#SP20_2_2_1_4">&#167;20.2.2.1.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">, </span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_to_node</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::add_token_to_node<button class="popup" onclick="togglePopup('usagePopup138')">...<span class="popuptext" id="usagePopup138">Usage of <b>InterSchemas::add_token_to_node</b>:<br><a href="#SP26">&#167;26</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">, </span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">p</span><span class="plain">) &amp;&amp; (</span><span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)) </span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">p</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::add_token_after<button class="popup" onclick="togglePopup('usagePopup139')">...<span class="popuptext" id="usagePopup139">Usage of <b>InterSchemas::add_token_after</b>:<br><a href="#SP21">&#167;21</a>, <a href="#SP26">&#167;26</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">existing</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't add after null element"</span><span class="plain">);</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">was</span><span class="plain"> = </span><span class="identifier">existing</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">existing</span><span class="plain">-&gt;</span><span class="identifier">next</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">was</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">existing</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. Logging. </b>It is invaluable to be able to see compiled schemas in the debugging log, so
we go to some trouble here.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::log<button class="popup" onclick="togglePopup('usagePopup140')">...<span class="popuptext" id="usagePopup140">Usage of <b>InterSchemas::log</b>:<br>Building Module - <a href="1-bm.html#SP4_5">&#167;4.5</a></span></button></span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vis</span><span class="plain">) {</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = (</span><span class="reserved">inter_schema</span><span class="plain"> *) </span><span class="identifier">vis</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;null schema&gt;\n"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;schema without nodes&gt;\n"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP16">InterSchemas::log_depth</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::log_depth<button class="popup" onclick="togglePopup('usagePopup141')">...<span class="popuptext" id="usagePopup141">Usage of <b>InterSchemas::log_depth</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP16">InterSchemas::log_just</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::log_just<button class="popup" onclick="togglePopup('usagePopup142')">...<span class="popuptext" id="usagePopup142">Usage of <b>InterSchemas::log_just</b>:<br>Emitting Inter Schemas - <a href="2-eis.html#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">blocked_by_conditional</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"XX"</span><span class="plain">); </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">d</span><span class="plain"> &lt; </span><span class="identifier">depth</span><span class="plain">; </span><span class="identifier">d</span><span class="plain">++) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STATEMENT_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (statement) %S\n"</span><span class="plain">, </span><span class="functiontext"><a href="1-ip.html#SP2">Primitives::name</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain">));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPERATION_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (operation) %S\n"</span><span class="plain">, </span><span class="functiontext"><a href="1-ip.html#SP2">Primitives::name</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain">));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CODE_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (code)"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unclosed</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" &lt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unopened</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" &gt;"</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EVAL_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (eval)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASSEMBLY_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (assembly)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIRECTIVE_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (directive) "</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">dir_clarifier</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IFDEF_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#ifdef"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IFNDEF_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#ifndef"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IFTRUE_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#iftrue"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IFFALSE_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#iffalse"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IFNOT_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#ifnot"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ENDIF_I6RW:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"#endif"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;unknown&gt;"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LABEL_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (label)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CALL_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (call)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MESSAGE_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (message)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CALLMESSAGE_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (call-message)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SUBEXPRESSION_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (subexpression)\n"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXPRESSION_ISNT:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (expr)"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" ;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unclosed</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" &lt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">unopened</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" &gt;"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" - empty"</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">d</span><span class="plain"> &lt; </span><span class="identifier">depth</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">d</span><span class="plain">++) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP16">InterSchemas::log_ist</a></span><span class="plain">(</span><span class="identifier">t</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain"> != </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" !!! ownership incorrect here"</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="#SP16">InterSchemas::log_depth</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">+1);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::log_ist<button class="popup" onclick="togglePopup('usagePopup143')">...<span class="popuptext" id="usagePopup143">Usage of <b>InterSchemas::log_ist</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;NULL-IST&gt;"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">ist_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RAW_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"RAW "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPERATOR_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"OPERATOR "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPCODE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"OPCODE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIRECTIVE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"DIRECTIVE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IDENTIFIER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"IDENTIFIER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RESERVED_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"RESERVED "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NUMBER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"NUMBER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BIN_NUMBER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"BIN_NUMBER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HEX_NUMBER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"HEX_NUMBER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REAL_NUMBER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"REAL_NUMBER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DQUOTED_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"DQUOTED "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SQUOTED_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"SQUOTED "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHITE_SPACE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"WHITE_SPACE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIVIDER_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"DIVIDER "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_ROUND_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"OPEN_ROUND "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CLOSE_ROUND_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"CLOSE_ROUND "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_BRACE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"OPEN_BRACE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CLOSE_BRACE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"CLOSE_BRACE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMA_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"COMMA "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COLON_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"COLON "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">I7_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"I7 "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INLINE_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"INLINE "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASM_ARROW_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"ASM_ARROW "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASM_SP_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"ASM_SP "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASM_LABEL_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"ASM_LABEL "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASM_NEGATED_LABEL_ISTT:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"NEGASM_LABEL "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;unknown&gt;"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">GIVE_KIND_ID_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" GIVE_KIND_ID"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">GIVE_COMPARISON_ROUTINE_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" GIVE_COMPARISON_ROUTINE"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">DEREFERENCE_PROPERTY_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" DEREFERENCE_PROPERTY"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">ADOPT_LOCAL_STACK_FRAME_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" ADOPT_LOCAL_STACK_FRAME"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">CAST_TO_KIND_OF_OTHER_TERM_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" CAST_TO_KIND_OF_OTHER_TERM"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">BY_REFERENCE_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" BY_REFERENCE"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> &amp; </span><span class="constant">PERMIT_LOCALS_IN_TEXT_CMODE_ISSBM</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">" PERMIT_LOCALS_IN_TEXT_CMODE"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. Lint. </b>As can be seen, the <code class="display"><span class="extract">inter_schema</span></code> structure is quite complicated, and there
are numerous invariants it has to satisfy. As a precaution, then, we check that
all of these invariants hold before shipping out a compiled schema. This is
where the check is done:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::lint<button class="popup" onclick="togglePopup('usagePopup144')">...<span class="popuptext" id="usagePopup144">Usage of <b>InterSchemas::lint</b>:<br><a href="#SP20">&#167;20</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">err</span><span class="plain"> = </span><span class="functiontext"><a href="#SP17">InterSchemas::lint_isn</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">err</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Lint fail: %S\n$1\n"</span><span class="plain">, </span><span class="identifier">err</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter schema failed lint"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterSchemas::lint_isn<button class="popup" onclick="togglePopup('usagePopup145')">...<span class="popuptext" id="usagePopup145">Usage of <b>InterSchemas::lint_isn</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">asm</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">ist_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPCODE_ISTT:</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) </span><span class="identifier">asm</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains loose assembler"</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RAW_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains raw node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_BRACE_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains open-brace node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CLOSE_BRACE_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains close-brace node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_ROUND_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains open-round node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CLOSE_ROUND_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains close-round node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMA_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains comma node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIVIDER_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains divider node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RESERVED_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains reserved word node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COLON_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains colon node"</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPERATOR_ISTT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains operator node"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> == </span><span class="constant">open_brace_ISINC</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains manual open-brace"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> == </span><span class="constant">close_brace_ISINC</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"contains manual close-brace"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">NUMBER_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">NUMBER_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">asm</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"two consecutive numbers"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain"> != </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"ownership linkage broken"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"expression has child nodes"</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"non-expression has elements"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> != </span><span class="identifier">isn</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"child-parent linkage broken"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"ambiguous is-node"</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext"><a href="#SP17">InterSchemas::lint_isn</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">+1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">R</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. I6S. </b></p>
<pre class="display">
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">compiled_i6s_dict</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="functiontext">InterSchemas::from_i6s<button class="popup" onclick="togglePopup('usagePopup146')">...<span class="popuptext" id="usagePopup146">Usage of <b>InterSchemas::from_i6s</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_quoted_inames</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> **</span><span class="identifier">quoted_inames</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">compiled_i6s_dict</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">compiled_i6s_dict</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">dict_entry</span><span class="plain"> *</span><span class="identifier">de</span><span class="plain"> = </span><span class="identifier">Dictionaries::find</span><span class="plain">(</span><span class="identifier">compiled_i6s_dict</span><span class="plain">, </span><span class="identifier">prototype</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">de</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> (</span><span class="reserved">inter_schema</span><span class="plain"> *) </span><span class="identifier">Dictionaries::read_value</span><span class="plain">(</span><span class="identifier">compiled_i6s_dict</span><span class="plain">, </span><span class="identifier">prototype</span><span class="plain">);</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">result</span><span class="plain"> = </span><span class="functiontext"><a href="#SP20">InterSchemas::from_text</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">no_quoted_inames</span><span class="plain">, </span><span class="identifier">quoted_inames</span><span class="plain">);</span>
<span class="identifier">Dictionaries::create</span><span class="plain">(</span><span class="identifier">compiled_i6s_dict</span><span class="plain">, </span><span class="identifier">prototype</span><span class="plain">);</span>
<span class="identifier">Dictionaries::write_value</span><span class="plain">(</span><span class="identifier">compiled_i6s_dict</span><span class="plain">, </span><span class="identifier">prototype</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">result</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">result</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. Heads and tails. </b>Most inline-defined phrases compile to a single schema, but some compile to
two, the head and the tail (which typically bookend a loop structure). A
general inline definition must therefore in principle be compiled to two
schemas, not one.
</p>
<p class="inwebparagraph">The definition is in a wide C string because it's coming raw from the lexer,
as the content of a <code class="display"><span class="extract">(- ... -)</span></code> lexeme, but with the <code class="display"><span class="extract">(-</span></code> and <code class="display"><span class="extract">-)</span></code> removed.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::from_inline_phrase_definition<button class="popup" onclick="togglePopup('usagePopup147')">...<span class="popuptext" id="usagePopup147">Usage of <b>InterSchemas::from_inline_phrase_definition</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">inter_schema</span><span class="plain"> **</span><span class="identifier">head</span><span class="plain">, </span><span class="reserved">inter_schema</span><span class="plain"> **</span><span class="identifier">tail</span><span class="plain">) {</span>
<span class="plain">*</span><span class="identifier">head</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; *</span><span class="identifier">tail</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">head_defn</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">tail_defn</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Fetch the head and tail definitions</span> <span class="cwebmacronumber">19.1</span>&gt;<span class="plain">;</span>
<span class="plain">*</span><span class="identifier">head</span><span class="plain"> = </span><span class="functiontext"><a href="#SP20">InterSchemas::from_text</a></span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">tail_defn</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
<span class="plain">*</span><span class="identifier">tail</span><span class="plain"> = </span><span class="functiontext"><a href="#SP20">InterSchemas::from_text</a></span><span class="plain">(</span><span class="identifier">tail_defn</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP19_1"></a><b>&#167;19.1. </b>A tail will only be present if the definition contains <code class="display"><span class="extract">{-block}</span></code>. If it
does, we then split the definition into a head and a tail, and again trim
white space from each. Note that <code class="display"><span class="extract">{-block}</span></code> is not legal anywhere else.
</p>
<p class="inwebparagraph">For example:
</p>
<blockquote>
<p>To repeat with a King's Court begin -- end loop:</p>
</blockquote>
<p class="inwebparagraph">could be given the definition:
</p>
<pre class="display">
<span class="plain">@</span><span class="identifier">push</span><span class="plain"> {-</span><span class="identifier">my</span><span class="plain">:</span><span class="identifier">trcount</span><span class="plain">};</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">trcount</span><span class="plain">=1; </span><span class="identifier">trcount</span><span class="plain">&lt;=3; </span><span class="identifier">trcount</span><span class="plain">++)</span>
<span class="plain">{-</span><span class="identifier">block</span><span class="plain">}</span>
<span class="plain">@</span><span class="identifier">pull</span><span class="plain"> </span><span class="identifier">trcount</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">This then repeats what it's given three times, while guaranteeing that the
counter is always a local variable called <code class="display"><span class="extract">trcount</span></code>, and that no matter how
such operations are nested, they will work. We might then write:
</p>
<pre class="display">
<span class="identifier">To</span><span class="plain"> </span><span class="identifier">say</span><span class="plain"> </span><span class="identifier">iteration</span><span class="plain">: (- </span><span class="identifier">print</span><span class="plain"> {-</span><span class="identifier">my</span><span class="plain">:</span><span class="identifier">trcount</span><span class="plain">}; -).</span>
</pre>
<p class="inwebparagraph">and then this will work as might be hoped:
</p>
<pre class="display">
<span class="identifier">repeat</span><span class="plain"> </span><span class="identifier">with</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">King</span><span class="plain">'</span><span class="identifier">s</span><span class="plain"> </span><span class="identifier">Court</span><span class="plain">:</span>
<span class="identifier">say</span><span class="plain"> </span><span class="string">"[iteration]..."</span><span class="plain">;</span>
<span class="identifier">repeat</span><span class="plain"> </span><span class="identifier">with</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">King</span><span class="plain">'</span><span class="identifier">s</span><span class="plain"> </span><span class="identifier">Court</span><span class="plain">:</span>
<span class="identifier">say</span><span class="plain"> </span><span class="string">"[iteration]. You play a Shanty Town, getting +2 Actions."</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">This is a slightly contrived example, and often <code class="display"><span class="extract">{-block}</span></code> isn't needed. If
we didn't care about accessing the iteration count in the body of the loop,
for instance, we could simply have defined:
</p>
<pre class="display">
<span class="reserved">for</span><span class="plain"> ({-</span><span class="identifier">my</span><span class="plain">:1}=1; {-</span><span class="identifier">my</span><span class="plain">:1}&lt;=3; {-</span><span class="identifier">my</span><span class="plain">:1}++)</span>
</pre>
<p class="inwebparagraph">and Inform would then have allocated a new variable as loop counter each time.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Fetch the head and tail definitions</span> <span class="cwebmacronumber">19.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(*</span><span class="identifier">p</span><span class="plain">)) </span><span class="identifier">p</span><span class="plain">++;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="string">"%w"</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">effective_end</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0, </span><span class="identifier">L</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (!(</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))))</span>
<span class="identifier">effective_end</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">+1;</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">effective_end</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0, </span><span class="identifier">L</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::includes_wide_string_at</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"{-block}"</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">after</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">+8, </span><span class="identifier">before</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">))) </span><span class="identifier">after</span><span class="plain">++;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">-1))) </span><span class="identifier">before</span><span class="plain">--;</span>
<span class="identifier">Str::copy_tail</span><span class="plain">(</span><span class="identifier">tail_defn</span><span class="plain">, </span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">);</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">head_defn</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP19">&#167;19</a>.</p>
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. Compiler. </b>This is a two-stage process.
</p>
<pre class="display">
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="functiontext">InterSchemas::from_text<button class="popup" onclick="togglePopup('usagePopup148')">...<span class="popuptext" id="usagePopup148">Usage of <b>InterSchemas::from_text</b>:<br><a href="#SP18">&#167;18</a>, <a href="#SP19">&#167;19</a></span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">abbreviated</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_quoted_inames</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> **</span><span class="identifier">quoted_inames</span><span class="plain">) {</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="functiontext"><a href="#SP3">InterSchemas::new</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DA</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain">)))</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\n\n------------\nCompiling inter schema from: &lt;%S&gt;\n"</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Begin the schema as a single expression node with a linked list of tokens</span> <span class="cwebmacronumber">20.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Perform transformations to grow the tree and reduce the token count</span> <span class="cwebmacronumber">20.4</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="#SP17">InterSchemas::lint</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DA</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DETAILS_DA</span><span class="plain">)))</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Completed inter schema:\n$1"</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">sch</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP20_1"></a><b>&#167;20.1. Stage 1. </b>Our method is to tokenise the source code as if it were Inform 6, but to look
out for the two extra syntaxes allowed, <code class="display"><span class="extract">{-bracing}</span></code> and <code class="display"><span class="extract">(+ Inform 7 interpolation +)</span></code>.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">NO_TOKSTATE</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">COMMENT_TOKSTATE</span><span class="plain"> </span><span class="comment"> currently scanning an I6 comment <code class="display"><span class="extract">! ...</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">DQUOTED_TOKSTATE</span>
<span class="definitionkeyword">enum</span> <span class="constant">SQUOTED_TOKSTATE</span>
<span class="definitionkeyword">enum</span> <span class="constant">WHITE_TOKSTATE</span>
<span class="definitionkeyword">enum</span> <span class="constant">TOK_TOKSTATE</span><span class="plain"> </span><span class="comment"> an actual token</span>
</pre>
<p class="inwebparagraph"><a id="SP20_2"></a><b>&#167;20.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Begin the schema as a single expression node with a linked list of tokens</span> <span class="cwebmacronumber">20.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">definition_length</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">current_raw</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pos</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">abbreviated</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"*=-"</span><span class="plain">))) {</span>
<span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">dereference_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">pos</span><span class="plain">&lt;</span><span class="identifier">definition_length</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain">++) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">tokeniser_state</span><span class="plain"> == </span><span class="constant">TOK_TOKSTATE</span><span class="plain">) || (</span><span class="identifier">tokeniser_state</span><span class="plain"> == </span><span class="constant">NO_TOKSTATE</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">WHITE_TOKSTATE</span><span class="plain">;</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="character">' '</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tokeniser_state</span><span class="plain"> == </span><span class="constant">WHITE_TOKSTATE</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">tokeniser_state</span><span class="plain">) {</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">DQUOTED_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'"'</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">SQUOTED_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\''</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMENT_TOKSTATE:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\n'</span><span class="plain">) </span><span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHITE_TOKSTATE:</span><span class="plain"> </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain"> </span><span class="identifier">default:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'!'</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">COMMENT_TOKSTATE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'"'</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">DQUOTED_TOKSTATE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\''</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">SQUOTED_TOKSTATE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'{'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">abbreviated</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Look for a possible bracing</span> <span class="cwebmacronumber">20.2.4</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'*'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">abbreviated</span><span class="plain"> == </span><span class="identifier">TRUE</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Look for a possible abbreviated command</span> <span class="cwebmacronumber">20.2.5</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'('</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">+1) == </span><span class="character">'+'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">abbreviated</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Look for a possible Inform 7 fragment</span> <span class="cwebmacronumber">20.2.3</span>&gt;
<span class="reserved">else</span><span class="plain"> </span>&lt;<span class="cwebmacro">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20">&#167;20</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_1"></a><b>&#167;20.2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">TOK_TOKSTATE</span><span class="plain">;</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2">&#167;20.2</a>, <a href="#SP20_2_3">&#167;20.2.3</a>, <a href="#SP20_2_4">&#167;20.2.4</a>, <a href="#SP20_2_5">&#167;20.2.5</a> (twice).</p>
<p class="inwebparagraph"><a id="SP20_2_2"></a><b>&#167;20.2.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">)) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">tokeniser_state</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHITE_TOKSTATE:</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DQUOTED_TOKSTATE:</span>
<span class="functiontext"><a href="#SP31">InterSchemas::de_escape_text</a></span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">DQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">current_raw</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SQUOTED_TOKSTATE:</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">SQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">current_raw</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span>
&lt;<span class="cwebmacro">Look for individual tokens</span> <span class="cwebmacronumber">20.2.2.1</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">tokeniser_state</span><span class="plain"> = </span><span class="constant">NO_TOKSTATE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2">&#167;20.2</a> (8 times), <a href="#SP20_2_3">&#167;20.2.3</a>, <a href="#SP20_2_4">&#167;20.2.4</a>, <a href="#SP20_2_5">&#167;20.2.5</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_3"></a><b>&#167;20.2.3. </b>Material in <code class="display"><span class="extract">(+ ... +)</span></code> notation is an interpolation of I7 source text.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Look for a possible Inform 7 fragment</span> <span class="cwebmacronumber">20.2.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">save_pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">accept</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">source_text_fragment</span><span class="plain">);</span>
<span class="identifier">pos</span><span class="plain"> += </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">-1) == </span><span class="character">'+'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">')'</span><span class="plain">)) {</span>
<span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">source_text_fragment</span><span class="plain">);</span>
<span class="identifier">accept</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">source_text_fragment</span><span class="plain">, </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">++));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">accept</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Expand a fragment of Inform 7 text</span> <span class="cwebmacronumber">20.2.3.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> { </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="character">'('</span><span class="plain">; </span>&lt;<span class="cwebmacro">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt;<span class="plain">; </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">save_pos</span><span class="plain">; }</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">source_text_fragment</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2">&#167;20.2</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_3_1"></a><b>&#167;20.2.3.1. </b>The empty I7 interpolation is legal, but produces no result.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Expand a fragment of Inform 7 text</span> <span class="cwebmacronumber">20.2.3.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">source_text_fragment</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">I7_ISTT</span><span class="plain">, </span><span class="identifier">source_text_fragment</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_3">&#167;20.2.3</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_4"></a><b>&#167;20.2.4. </b>Material in braces sometimes indicates an inline command, but not always,
because braces often occur innocently in I6 code. So we require the first
character after the open-brace not to be white-space, and also not to be
a pipe (though I've forgotten why). The text inside the braces is called
a "bracing".
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Look for a possible bracing</span> <span class="cwebmacronumber">20.2.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">save_pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">++, </span><span class="identifier">accept</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">bracing</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">TRUE</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'}'</span><span class="plain">) { </span><span class="identifier">accept</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">bracing</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="identifier">pos</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">first</span><span class="plain"> = </span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">bracing</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">accept</span><span class="plain">) &amp;&amp; (</span><span class="identifier">first</span><span class="plain"> != </span><span class="character">' '</span><span class="plain">) &amp;&amp; (</span><span class="identifier">first</span><span class="plain"> != </span><span class="character">'\t'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">first</span><span class="plain"> != </span><span class="character">'\n'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">first</span><span class="plain"> != </span><span class="character">'|'</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Parse a bracing into an inline command</span> <span class="cwebmacronumber">20.2.4.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> { </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="character">'{'</span><span class="plain">; </span>&lt;<span class="cwebmacro">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt;<span class="plain">; </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">save_pos</span><span class="plain">; }</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">bracing</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2">&#167;20.2</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_4_1"></a><b>&#167;20.2.4.1. </b>That's everything, then, except the one thing that counts: how to expand
a bracing.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Parse a bracing into an inline command</span> <span class="cwebmacronumber">20.2.4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">INLINE_ISTT</span><span class="plain">, </span><span class="identifier">bracing</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">bracing</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand2</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Decompose the bracing</span> <span class="cwebmacronumber">20.2.4.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"primitive-definition"</span><span class="plain">)) {</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">primitive_definition_ISINC</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"repeat-through"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">repeat_through_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"repeat-through-list"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">repeat_through_list_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"number-of"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">number_of_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"random-of"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">random_of_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"total-of"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">total_of_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"extremal"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">extremal_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"function-application"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">function_application_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"description-application"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">description_application_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"solve-equation"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">solve_equation_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"switch"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">switch_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"break"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">break_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"verbose-checking"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">verbose_checking_ISINSC</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"new"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">new_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"new-list-of"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">new_list_of_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"printing-routine"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">printing_routine_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ranger-routine"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">ranger_routine_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"next-routine"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">next_routine_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"previous-routine"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">previous_routine_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"strong-kind"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">strong_kind_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"weak-kind"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">weak_kind_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"backspace"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">backspace_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"erase"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">erase_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"open-brace"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">open_brace_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"close-brace"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">close_brace_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"label"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">label_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"counter"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">counter_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"counter-storage"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">counter_storage_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"counter-up"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">counter_up_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"counter-down"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">counter_down_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"counter-makes-array"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">counter_makes_array_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"by-reference"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">by_reference_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"by-reference-blank-out"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">by_reference_blank_out_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"reference-exists"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">reference_exists_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"lvalue-by-reference"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">lvalue_by_reference_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"by-value"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">by_value_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"box-quotation-text"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">box_quotation_text_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"try-action"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">try_action_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"try-action-silently"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">try_action_silently_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"return-value"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">return_value_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"return-value-from-rule"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">return_value_from_rule_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"property-holds-block-value"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">property_holds_block_value_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"mark-event-used"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">mark_event_used_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"my"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">my_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"unprotect"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">unprotect_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"copy"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">copy_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"initialise"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">initialise_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"matches-description"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">matches_description_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"now-matches-description"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">now_matches_description_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"arithmetic-operation"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">arithmetic_operation_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"say"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">say_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"show-me"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">show_me_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"segment-count"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">segment_count_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"final-segment-marker"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">final_segment_marker_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"list-together"</span><span class="plain">)) {</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">list_together_ISINC</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"unarticled"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">unarticled_ISINSC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"articled"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_subcommand</span><span class="plain"> = </span><span class="constant">articled_ISINSC</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"rescale"</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">rescale_ISINC</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">unknown_ISINC</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_4">&#167;20.2.4</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_4_1_1"></a><b>&#167;20.2.4.1.1. </b>A bracing can take any of the following forms:
</p>
<pre class="display">
<span class="plain">{-command}</span>
<span class="plain">{-command:operand}</span>
<span class="plain">{-command:operand:operand2}</span>
<span class="plain">{-command:operand&lt;property name}</span>
<span class="plain">{-command:operand&gt;property name}</span>
<span class="plain">{some text}</span>
<span class="plain">{-annotation:some text}</span>
</pre>
<p class="inwebparagraph">We parse this with the command or annotation in <code class="display"><span class="extract">command</span></code>, the "some text"
or operand in <code class="display"><span class="extract">bracing</span></code>, the property name (if given) in <code class="display"><span class="extract">extremal_property</span></code>,
the direction of the <code class="display"><span class="extract">&lt;</span></code> or <code class="display"><span class="extract">&gt;</span></code> in <code class="display"><span class="extract">extremal_property_sign</span></code>, and the second,
optional, operand in <code class="display"><span class="extract">operand2</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Decompose the bracing</span> <span class="cwebmacronumber">20.2.4.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain">) == </span><span class="character">'-'</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">portion</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=1, </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">portion</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">1</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">':'</span><span class="plain">) </span><span class="identifier">portion</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">command</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">2</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">':'</span><span class="plain">) </span><span class="identifier">portion</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'&lt;'</span><span class="plain">) { </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property_sign</span><span class="plain"> = </span><span class="identifier">MEASURE_T_OR_LESS</span><span class="plain">; </span><span class="identifier">portion</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">; }</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'&gt;'</span><span class="plain">) { </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property_sign</span><span class="plain"> = </span><span class="identifier">MEASURE_T_OR_MORE</span><span class="plain">; </span><span class="identifier">portion</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">; }</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">3</span><span class="plain">:</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">operand2</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">4</span><span class="plain">:</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property_sign</span><span class="plain"> != </span><span class="identifier">MEASURE_T_EXACTLY</span><span class="plain">) {</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (&lt;</span><span class="identifier">property</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">&gt;(</span><span class="identifier">W</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">extremal_property</span><span class="plain"> = &lt;&lt;</span><span class="identifier">rp</span><span class="plain">&gt;&gt;;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">operand</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">pname</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_4_1">&#167;20.2.4.1</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_5"></a><b>&#167;20.2.5. </b>In abbreviated prototypes, <code class="display"><span class="extract">*1</span></code> and <code class="display"><span class="extract">*2</span></code> are placeholders.
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">GIVE_KIND_ID_ISSBM</span><span class="plain"> </span><span class="constant">1</span>
<span class="definitionkeyword">define</span> <span class="constant">GIVE_COMPARISON_ROUTINE_ISSBM</span><span class="plain"> </span><span class="constant">2</span>
<span class="definitionkeyword">define</span> <span class="constant">DEREFERENCE_PROPERTY_ISSBM</span><span class="plain"> </span><span class="constant">4</span>
<span class="definitionkeyword">define</span> <span class="constant">ADOPT_LOCAL_STACK_FRAME_ISSBM</span><span class="plain"> </span><span class="constant">8</span>
<span class="definitionkeyword">define</span> <span class="constant">CAST_TO_KIND_OF_OTHER_TERM_ISSBM</span><span class="plain"> </span><span class="constant">16</span>
<span class="definitionkeyword">define</span> <span class="constant">BY_REFERENCE_ISSBM</span><span class="plain"> </span><span class="constant">32</span>
<span class="definitionkeyword">define</span> <span class="constant">PERMIT_LOCALS_IN_TEXT_CMODE_ISSBM</span><span class="plain"> </span><span class="constant">64</span>
<span class="definitionkeyword">define</span> <span class="constant">TREAT_AS_LVALUE_CMODE_ISSBM</span><span class="plain"> </span><span class="constant">128</span>
<span class="definitionkeyword">define</span> <span class="constant">JUST_ROUTINE_CMODE_ISSBM</span><span class="plain"> </span><span class="constant">256</span>
<span class="definitionkeyword">define</span> <span class="constant">TABLE_EXISTENCE_CMODE_ISSBM</span><span class="plain"> </span><span class="constant">512</span>
</pre>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Look for a possible abbreviated command</span> <span class="cwebmacronumber">20.2.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'!'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">PERMIT_LOCALS_IN_TEXT_CMODE_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'%'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">TREAT_AS_LVALUE_CMODE_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'$'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">JUST_ROUTINE_CMODE_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'#'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">GIVE_KIND_ID_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'_'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">GIVE_COMPARISON_ROUTINE_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'+'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">DEREFERENCE_PROPERTY_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'|'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | (</span><span class="constant">DEREFERENCE_PROPERTY_ISSBM</span><span class="plain"> + </span><span class="constant">TREAT_AS_LVALUE_CMODE_ISSBM</span><span class="plain">); </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">ADOPT_LOCAL_STACK_FRAME_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'&lt;'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">CAST_TO_KIND_OF_OTHER_TERM_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'^'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | (</span><span class="constant">ADOPT_LOCAL_STACK_FRAME_ISSBM</span><span class="plain"> + </span><span class="constant">BY_REFERENCE_ISSBM</span><span class="plain">); </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'&gt;'</span><span class="plain">: </span><span class="identifier">iss_bitmap</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain"> | </span><span class="constant">BY_REFERENCE_ISSBM</span><span class="plain">; </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, ++</span><span class="identifier">at</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Absorb raw material, if any</span> <span class="cwebmacronumber">20.2.2</span>&gt;<span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">pos</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;=</span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">INLINE_ISTT</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">substitute_ISINC</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">constant_number</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> - </span><span class="character">'1'</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'?'</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">INLINE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*?"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"*?"</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">current_sentence_ISINC</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'&amp;'</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">INLINE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*&amp;"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">bracing</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"*&amp;"</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> = </span><span class="constant">combine_ISINC</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_modifiers</span><span class="plain"> = </span><span class="identifier">iss_bitmap</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) {</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"the '*-' schema notation has been abolished"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'*'</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="character">'*'</span><span class="plain">; </span>&lt;<span class="cwebmacro">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt;<span class="plain">;</span>
<span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="character">'{'</span><span class="plain">; </span>&lt;<span class="cwebmacro">Absorb a raw character</span> <span class="cwebmacronumber">20.2.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2">&#167;20.2</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_2_1"></a><b>&#167;20.2.2.1. </b>That leaves us with just the main case to handle: raw I6 code which is
outside of quotation marks and commentary, and which doesn't include
bracings or I7 interpolations. That might look like, for instance,
</p>
<pre class="display">
<span class="identifier">Frog</span><span class="plain"> + </span><span class="constant">2</span><span class="plain">*</span><span class="identifier">Toad</span><span class="plain">(</span>
</pre>
<p class="inwebparagraph">(there is no reason to suppose that this stretch of code is complete or
matches parentheses); we must tokenise it into
</p>
<p class="inwebparagraph"><code class="display"><span class="extract">Frog</span></code> <code class="display"><span class="extract">W</span></code> <code class="display"><span class="extract">+</span></code> <code class="display"><span class="extract">W</span></code> <code class="display"><span class="extract">2</span></code> <code class="display"><span class="extract">*</span></code> <code class="display"><span class="extract">Toad</span></code> <code class="display"><span class="extract">(</span></code>
</p>
<p class="inwebparagraph">where <code class="display"><span class="extract">W</span></code> indicates a white space token. What we do is scan through the
text until we reach the start of a new token, and then break off what we
scanned through since the last time.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Look for individual tokens</span> <span class="cwebmacronumber">20.2.2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c_start</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">escaped</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">p</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">p</span><span class="plain"> &lt; </span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">p</span><span class="plain">++) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c1</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">), </span><span class="identifier">c2</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">c3</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain"> &lt; </span><span class="identifier">L</span><span class="plain">-1) </span><span class="identifier">c2</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">+1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain"> &lt; </span><span class="identifier">L</span><span class="plain">-2) </span><span class="identifier">c3</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">+2);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">escaped</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'$'</span><span class="plain">) &amp;&amp; ((</span><span class="identifier">p</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) || (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-1)) == </span><span class="identifier">FALSE</span><span class="plain">)))</span>
&lt;<span class="cwebmacro">Break off here for real, binary or hexadecimal notation</span> <span class="cwebmacronumber">20.2.2.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) </span>&lt;<span class="cwebmacro">Break off here for negative number</span> <span class="cwebmacronumber">20.2.2.1.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Break off here for operators</span> <span class="cwebmacronumber">20.2.2.1.3</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="constant">0x00A7</span><span class="plain">) </span><span class="identifier">escaped</span><span class="plain"> = </span><span class="identifier">escaped</span><span class="plain">?</span><span class="identifier">FALSE:TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c_start</span><span class="plain"> &lt; </span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2">&#167;20.2.2</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_2_1_1"></a><b>&#167;20.2.2.1.1. </b>Recall that in I6 notation, a dollar introduces a non-decimal number, and
the character after the initial dollar determines which:
</p>
<pre class="display">
<span class="plain">$+3.14159E2</span>
<span class="plain">$$1001001</span>
<span class="plain">$1FE6</span>
</pre>
<p class="inwebparagraph"></p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Break off here for real, binary or hexadecimal notation</span> <span class="cwebmacronumber">20.2.2.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">c2</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'+'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'-'</span><span class="plain">:</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1) == </span><span class="character">'.'</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1) == </span><span class="character">'E'</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1) == </span><span class="character">'e'</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1))))</span>
<span class="identifier">y</span><span class="plain">++;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">y</span><span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'$'</span><span class="plain">:</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1) == </span><span class="character">'0'</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1) == </span><span class="character">'1'</span><span class="plain">))</span>
<span class="identifier">y</span><span class="plain">++;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">y</span><span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="identifier">default:</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">+1)))</span>
<span class="identifier">y</span><span class="plain">++;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">y</span><span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2_1">&#167;20.2.2.1</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_2_1_2"></a><b>&#167;20.2.2.1.2. </b>A token beginning with a minus sign and continuing with digits may still
not be a negative number: it may be the binary subtraction operator.
For example, we need to tokenise <code class="display"><span class="extract">x-1</span></code> as
</p>
<pre class="display">
<span class="plain">|x| |-| |1|</span>
</pre>
<p class="inwebparagraph">and not as
</p>
<pre class="display">
<span class="plain">|x| |-1|</span>
</pre>
<p class="inwebparagraph">This requires context, that is, remembering what the previous token was.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Break off here for negative number</span> <span class="cwebmacronumber">20.2.2.1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">preceding_token</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">preceding_token</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">preceding_token</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPERATOR_ISTT</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">preceding_token</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIVIDER_ISTT</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">c_start</span><span class="plain"> == </span><span class="identifier">p</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(!((</span><span class="identifier">abbreviated</span><span class="plain">) &amp;&amp; (</span><span class="identifier">preceding_token</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">)))) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dc</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">dc</span><span class="plain">))) </span><span class="identifier">dc</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dc</span><span class="plain"> &gt; </span><span class="identifier">p</span><span class="plain">+1) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">dc</span><span class="plain"> - </span><span class="constant">1</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain"> = </span><span class="identifier">y</span><span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2_1">&#167;20.2.2.1</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_2_1_3"></a><b>&#167;20.2.2.1.3. </b>In I6, operators made of non-alphanumeric characters can be up to three
characters long, and we take the longest match: thus <code class="display"><span class="extract">--&gt;</span></code> is a trigraph,
not the monograph <code class="display"><span class="extract">-</span></code> followed by the digraph <code class="display"><span class="extract">-&gt;</span></code>.
</p>
<p class="inwebparagraph">We treat the <code class="display"><span class="extract">@</span></code> sign as if it were alphanumeric for the sake of assembly
language opcodes such as <code class="display"><span class="extract">@pull</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Break off here for operators</span> <span class="cwebmacronumber">20.2.2.1.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">trigraph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c1</span><span class="plain">)) || (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'_'</span><span class="plain">) || (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'$'</span><span class="plain">)) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="constant">0x00A7</span><span class="plain">) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c2</span><span class="plain">))) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c2</span><span class="plain">))) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c3</span><span class="plain">))) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'@'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c2</span><span class="plain">))) </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'+'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'+'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'&gt;'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'='</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'&lt;'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'='</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'='</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'='</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'&gt;'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'.'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'&amp;'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'.'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'~'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'~'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'~'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'='</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'&amp;'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'&amp;'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'|'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'|'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c3</span><span class="plain"> == </span><span class="character">'&gt;'</span><span class="plain">)) </span><span class="identifier">trigraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trigraph</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+2;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain"> += </span><span class="constant">2</span><span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">digraph</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">p</span><span class="plain">++;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">monograph</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = </span><span class="identifier">c_start</span><span class="plain">, </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">-1;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">x</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">; </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt;<span class="plain">;</span>
<span class="identifier">c_start</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">+1;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2_1">&#167;20.2.2.1</a>.</p>
<p class="inwebparagraph"><a id="SP20_2_2_1_4"></a><b>&#167;20.2.2.1.4. </b>In this code, the new token is between character positions <code class="display"><span class="extract">x</span></code> and <code class="display"><span class="extract">y</span></code>
inclusive; we ignore an empty token.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Break off a token</span> <span class="cwebmacronumber">20.2.2.1.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">y</span><span class="plain"> &gt;= </span><span class="identifier">x</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">x</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt;= </span><span class="identifier">y</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">which_number</span><span class="plain"> = -1, </span><span class="identifier">which_quote</span><span class="plain"> = -1;</span>
&lt;<span class="cwebmacro">Identify this new token</span> <span class="cwebmacronumber">20.2.2.1.4.1</span>&gt;<span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="identifier">is</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">which</span><span class="plain">, </span><span class="identifier">which_rw</span><span class="plain">, </span><span class="identifier">which_number</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">which_quote</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">as_quoted</span><span class="plain"> = </span><span class="identifier">quoted_inames</span><span class="plain">[</span><span class="identifier">which_quote</span><span class="plain">];</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">) </span><span class="identifier">preceding_token</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2_1">&#167;20.2.2.1</a>, <a href="#SP20_2_2_1_1">&#167;20.2.2.1.1</a> (four times), <a href="#SP20_2_2_1_2">&#167;20.2.2.1.2</a> (twice), <a href="#SP20_2_2_1_3">&#167;20.2.2.1.3</a> (6 times).</p>
<p class="inwebparagraph"><a id="SP20_2_2_1_4_1"></a><b>&#167;20.2.2.1.4.1. </b>Finally, we identify what sort of token we're looking at.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Identify this new token</span> <span class="cwebmacronumber">20.2.2.1.4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'@'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPCODE_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="constant">0x00A7</span><span class="plain">)</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">1</span><span class="plain">) == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">2</span><span class="plain">)))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (!</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">1</span><span class="plain">)))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'$'</span><span class="plain">) &amp;&amp; (!</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">1</span><span class="plain">)))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (!</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (!</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"QUOTED_INAME_0_"</span><span class="plain">)) </span><span class="identifier">which_quote</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"QUOTED_INAME_1_"</span><span class="plain">)) </span><span class="identifier">which_quote</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"I7_string"</span><span class="plain">)) { </span><span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">); </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"I7_String"</span><span class="plain">); }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"COMMA_WORD"</span><span class="plain">)) { </span><span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">); </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"comma_word"</span><span class="plain">); }</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">Characters::isdigit</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'$'</span><span class="plain">) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">HEX_NUMBER_ISTT</span><span class="plain">;</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'$'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">BIN_NUMBER_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'+'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">REAL_NUMBER_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'-'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">REAL_NUMBER_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'-'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"false"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">; </span><span class="identifier">which_number</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"true"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">; </span><span class="identifier">which_number</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"nothing"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">; </span><span class="identifier">which_number</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"if"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IF_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"else"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">ELSE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"style"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">STYLE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"return"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">RETURN_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rtrue"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">RTRUE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rfalse"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">RFALSE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"for"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">FOR_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"objectloop"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">OBJECTLOOP_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"while"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">WHILE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"do"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">DO_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"until"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">UNTIL_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"print"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">PRINT_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"print_ret"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">PRINTRET_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"new_line"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">NEWLINE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"give"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">GIVE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"move"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">MOVE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"remove"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">REMOVE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"jump"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">JUMP_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"switch"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">SWITCH_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"default"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">DEFAULT_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"font"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">FONT_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"continue"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">CONTINUE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"break"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">BREAK_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"quit"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">QUIT_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"restore"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">RESTORE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"spaces"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">SPACES_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">READ_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inversion"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">INVERSION_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFDEF"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFDEF_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFNDEF"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFNDEF_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFTRUE"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFTRUE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFFALSE"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFFALSE_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFNOT"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFNOT_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#ENDIF"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">ENDIF_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">","</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">COMMA_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">":"</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">COLON_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"("</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">")"</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"{"</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"}"</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">CLOSE_BRACE_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">";"</span><span class="plain">)) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIVIDER_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"."</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".&amp;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">PROPERTYADDRESS_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".#"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"="</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">STORE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"+"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">PLUS_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"-"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">MINUS_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">TIMES_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">DIVIDE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"%"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">MODULO_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&gt;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">GT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&gt;="</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">GE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&lt;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">LT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&lt;="</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">LE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"=="</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">EQ_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"~="</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">NE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"~~"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">NOT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&amp;&amp;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">AND_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"||"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">OR_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"or"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">ALTERNATIVE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ofclass"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">OFCLASS_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"has"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">HAS_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"hasnt"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">HASNT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"provides"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">PROVIDES_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"in"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">IN_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"notin"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">NOTIN_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"|"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">BITWISEOR_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"&amp;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">BITWISEAND_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"~"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">BITWISENOT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"++"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"-&gt;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">LOOKUPBYTE_BIP</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"--&gt;"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPERATOR_ISTT</span><span class="plain">; </span><span class="identifier">which</span><span class="plain"> = </span><span class="constant">LOOKUP_BIP</span><span class="plain">; }</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20_2_2_1_4">&#167;20.2.2.1.4</a>.</p>
<p class="inwebparagraph"><a id="SP20_3"></a><b>&#167;20.3. Stage 2. </b>In the second half of the process, we apply a series of transformations to
the schema tree, gradually shaking out the (sometimes ambiguous) syntactic
markers such as <code class="display"><span class="extract">COMMA_ISTT</span></code> and replacing them with semantically clear
subtrees.
</p>
<p class="inwebparagraph">Each transformation will be applied until it returns <code class="display"><span class="extract">FALSE</span></code> to say that
it could see nothing to do, or <code class="display"><span class="extract">NOT_APPLICABLE</span></code> to say that it did but
that it doesn't want to be called again. Some transformations make use
of temporary markers attached to nodes or tokens in the tree, so we clear
these out at the start of each iteration.
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="identifier">X</span><span class="plain">)</span>
<span class="plain">{</span>
<span class="functiontext"><a href="#SP20_3">InterSchemas::unmark</a></span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">TRUE</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">X</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SCHEMA_COMPILATION_DETAILS</span><span class="plain">, </span><span class="string">"After round of "</span><span class="plain"> #</span><span class="identifier">X</span><span class="plain"> </span><span class="string">":\n$1\n"</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::unmark<button class="popup" onclick="togglePopup('usagePopup149')">...<span class="popuptext" id="usagePopup149">Usage of <b>InterSchemas::unmark</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">preinsert</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext"><a href="#SP20_3">InterSchemas::unmark</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP20_4"></a><b>&#167;20.4. </b>With that mechanism in place, we can do the business:
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Perform transformations to grow the tree and reduce the token count</span> <span class="cwebmacronumber">20.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP21">InterSchemas::implied_braces</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::unbrace_schema</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::divide_schema</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::undivide_schema</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::resolve_halfopen_blocks</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::break_early_bracings</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::strip_spacing</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP23">InterSchemas::splitprints</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP24">InterSchemas::splitcases</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::strip_spacing</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP23">InterSchemas::splitprints</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP26">InterSchemas::identify_constructs</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP27">InterSchemas::treat_constructs</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::add_missing_bodies</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::remove_empties</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::outer_subexpressions</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::top_level_commas</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP25">InterSchemas::alternatecases</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::outer_subexpressions</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP22">InterSchemas::strip_all_spacing</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP28">InterSchemas::debracket</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP29">InterSchemas::implied_return_values</a></span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext"><a href="#SP30">InterSchemas::message_calls</a></span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP20">&#167;20</a>.</p>
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::implied_braces<button class="popup" onclick="togglePopup('usagePopup150')">...<span class="popuptext" id="usagePopup150">Usage of <b>InterSchemas::implied_braces</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">IF_I6RW</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">WHILE_I6RW</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">FOR_I6RW</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">SWITCH_I6RW</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">OBJECTLOOP_I6RW</span><span class="plain">))) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Make pre and post markers from here</span> <span class="cwebmacronumber">21.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">ELSE_I6RW</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Make pre and post markers from here</span> <span class="cwebmacronumber">21.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">changed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">rounds</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">changed</span><span class="plain">) {</span>
<span class="identifier">changed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="identifier">rounds</span><span class="plain">++;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">prev</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">preinsert</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">preinsert</span><span class="plain">--;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">open_b</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"{"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_after</a></span><span class="plain">(</span><span class="identifier">open_b</span><span class="plain">, </span><span class="identifier">prev</span><span class="plain">);</span>
<span class="identifier">changed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain">--;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">close_b</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">CLOSE_BRACE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"}"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_after</a></span><span class="plain">(</span><span class="identifier">close_b</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">);</span>
<span class="identifier">changed</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rounds</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP21_1"></a><b>&#167;21.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Make pre and post markers from here</span> <span class="cwebmacronumber">21.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">preinsert</span><span class="plain">++;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found_if</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">brl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">posted</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">upped</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">last_n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">) { </span><span class="identifier">brl</span><span class="plain">++; </span><span class="identifier">upped</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_BRACE_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">brl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">IF_I6RW</span><span class="plain">))</span>
<span class="identifier">found_if</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">brl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIVIDER_ISTT</span><span class="plain">) ||</span>
<span class="plain">((</span><span class="identifier">upped</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_BRACE_ISTT</span><span class="plain">)))) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">m</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">m</span><span class="plain">) &amp;&amp; (</span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">m</span><span class="plain"> = </span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">found_if</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) || (</span><span class="identifier">m</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">RESERVED_ISTT</span><span class="plain">) || (</span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> != </span><span class="constant">ELSE_I6RW</span><span class="plain">)) {</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain">++; </span><span class="identifier">posted</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">last_n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">posted</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">last_n</span><span class="plain">-&gt;</span><span class="element">postinsert</span><span class="plain">++;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP21">&#167;21</a> (twice).</p>
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::unbrace_schema<button class="popup" onclick="togglePopup('usagePopup151')">...<span class="popuptext" id="usagePopup151">Usage of <b>InterSchemas::unbrace_schema</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">prev</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">)) {</span>
<span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">code_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">CODE_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">code_isn</span><span class="plain">;</span>
<span class="identifier">code_isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">code_isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">code_isn</span><span class="plain">;</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) { </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; }</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">, *</span><span class="identifier">pn</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">brl</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_BRACE_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_BRACE_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">brl</span><span class="plain">--;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">brl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">pn</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">resumed</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="identifier">next</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">resumed</span><span class="plain">) &amp;&amp; (</span><span class="identifier">resumed</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">resumed</span><span class="plain"> = </span><span class="identifier">resumed</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">resumed</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">resumed</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::unbrace_schema</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::divide_schema<button class="popup" onclick="togglePopup('usagePopup152')">...<span class="popuptext" id="usagePopup152">Usage of <b>InterSchemas::divide_schema</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">=</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIVIDER_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">) {</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::divide_schema</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::undivide_schema<button class="popup" onclick="togglePopup('usagePopup153')">...<span class="popuptext" id="usagePopup153">Usage of <b>InterSchemas::undivide_schema</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIVIDER_ISTT</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIVIDER_ISTT</span><span class="plain">) { </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
<span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::undivide_schema</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="identifier">rv</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::resolve_halfopen_blocks<button class="popup" onclick="togglePopup('usagePopup154')">...<span class="popuptext" id="usagePopup154">Usage of <b>InterSchemas::resolve_halfopen_blocks</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> == </span><span class="constant">open_brace_ISINC</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP6">InterSchemas::mark_unclosed</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">inline_command</span><span class="plain"> == </span><span class="constant">close_brace_ISINC</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP7">InterSchemas::mark_unopened</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">);</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">) {</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::resolve_halfopen_blocks</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::permitted_early<button class="popup" onclick="togglePopup('usagePopup155')">...<span class="popuptext" id="usagePopup155">Usage of <b>InterSchemas::permitted_early</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">INLINE_ISTT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::break_early_bracings<button class="popup" onclick="togglePopup('usagePopup156')">...<span class="popuptext" id="usagePopup156">Usage of <b>InterSchemas::break_early_bracings</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">m</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::permitted_early</a></span><span class="plain">(</span><span class="identifier">n</span><span class="plain">)) {</span>
<span class="identifier">m</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">m</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">) {</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::break_early_bracings</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::strip_spacing<button class="popup" onclick="togglePopup('usagePopup157')">...<span class="popuptext" id="usagePopup157">Usage of <b>InterSchemas::strip_spacing</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::strip_spacing</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::strip_all_spacing<button class="popup" onclick="togglePopup('usagePopup158')">...<span class="popuptext" id="usagePopup158">Usage of <b>InterSchemas::strip_all_spacing</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prev</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">) { </span><span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; </span><span class="identifier">d</span><span class="plain">++; }</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP22">InterSchemas::strip_all_spacing</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::splitprints<button class="popup" onclick="togglePopup('usagePopup159')">...<span class="popuptext" id="usagePopup159">Usage of <b>InterSchemas::splitprints</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">)</span>
<span class="plain">&amp;&amp; ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">PRINT_I6RW</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">PRINTRET_I6RW</span><span class="plain">))) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">, *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COMMA_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> = </span><span class="constant">PRINT_I6RW</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"print"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">PRINT_I6RW</span><span class="plain">) </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"print"</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"print_ret"</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP23">InterSchemas::splitprints</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::casey<button class="popup" onclick="togglePopup('usagePopup160')">...<span class="popuptext" id="usagePopup160">Usage of <b>InterSchemas::casey</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COLON_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::splitcases<button class="popup" onclick="togglePopup('usagePopup161')">...<span class="popuptext" id="usagePopup161">Usage of <b>InterSchemas::splitcases</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COLON_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">original_child</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">defaulter</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">DEFAULT_I6RW</span><span class="plain">)) </span><span class="identifier">defaulter</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">sw_val</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">sw_code</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">defaulter</span><span class="plain">) {</span>
<span class="identifier">sw_code</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">CODE_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">sw_code</span><span class="plain">;</span>
<span class="identifier">sw_code</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">sw_val</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">sw_code</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">CODE_ISNT</span><span class="plain">);</span>
<span class="identifier">sw_val</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">sw_code</span><span class="plain">;</span>
<span class="identifier">sw_val</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">sw_val</span><span class="plain">;</span>
<span class="identifier">sw_code</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">switch_begins</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">switch_ends</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">pn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">pn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">SWITCH_I6RW</span><span class="plain">)) {</span>
<span class="identifier">switch_begins</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">pn2</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">pn2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pn2</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) { </span><span class="identifier">switch_ends</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">; }</span>
<span class="identifier">pn2</span><span class="plain"> = </span><span class="identifier">pn2</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">pn</span><span class="plain"> = </span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">switch_ends</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext"><a href="#SP6">InterSchemas::mark_unclosed</a></span><span class="plain">(</span><span class="identifier">sw_code</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">switch_begins</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext"><a href="#SP8">InterSchemas::mark_case_closed</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sw_val</span><span class="plain">) </span><span class="identifier">sw_val</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">STATEMENT_ISNT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">defaulter</span><span class="plain">)</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">DEFAULT_BIP</span><span class="plain">;</span>
<span class="reserved">else</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">CASE_BIP</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">sw_code_exp</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">sw_code_exp</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">sw_code</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">sw_code_exp</span><span class="plain">;</span>
<span class="identifier">sw_code_exp</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">sw_code</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sw_val</span><span class="plain">)</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">sw_val</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">sw_val</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">sw_code_exp</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">t</span><span class="plain">; </span><span class="identifier">t</span><span class="plain"> = </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)</span>
<span class="identifier">t</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">sw_code_exp</span><span class="plain">;</span>
<span class="identifier">sw_code_exp</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">original_child</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">attach</span><span class="plain"> = </span><span class="identifier">sw_code_exp</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="#SP24">InterSchemas::casey</a></span><span class="plain">(</span><span class="identifier">at</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">next_at</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">sw_code</span><span class="plain">;</span>
<span class="identifier">attach</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="identifier">attach</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">next_at</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain"> = </span><span class="identifier">next_at</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP24">InterSchemas::splitcases</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP25"></a><b>&#167;25. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::alternatecases<button class="popup" onclick="togglePopup('usagePopup162')">...<span class="popuptext" id="usagePopup162">Usage of <b>InterSchemas::alternatecases</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain"> == </span><span class="constant">CASE_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">A</span><span class="plain">) &amp;&amp; (</span><span class="identifier">B</span><span class="plain">) &amp;&amp; (</span><span class="identifier">B</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">OPERATION_ISNT</span><span class="plain">);</span>
<span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">ALTERNATIVECASE_BIP</span><span class="plain">;</span>
<span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span>
<span class="identifier">A</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">; </span><span class="identifier">B</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">; </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">B</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">; </span><span class="identifier">B</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP25">InterSchemas::alternatecases</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP26"></a><b>&#167;26. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::identify_constructs<button class="popup" onclick="togglePopup('usagePopup163')">...<span class="popuptext" id="usagePopup163">Usage of <b>InterSchemas::identify_constructs</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">operand2_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dangle</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">dangle_text</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PRINT_I6RW:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PRINTRET_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTNUMBER_BIP</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">)) {</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">pr</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pr</span><span class="plain">) {</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">)) {</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"address"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTADDRESS_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"number"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTNLNUMBER_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"char"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTCHAR_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"string"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTSTRING_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"name"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTNAME_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"object"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTOBJ_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"property"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTPROPERTY_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"the"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTDEF_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"The"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTCDEF_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"a"</span><span class="plain">)) || (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"an"</span><span class="plain">))) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTINDEF_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"A"</span><span class="plain">)) || (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"An"</span><span class="plain">))) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINTCINDEF_BIP</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">pr</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">open_b</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"("</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_after</a></span><span class="plain">(</span><span class="identifier">open_b</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">);</span>
<span class="identifier">open_b</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">open_b</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">close_b</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">")"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_after</a></span><span class="plain">(</span><span class="identifier">close_b</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">subordinate_to</span><span class="plain"> == </span><span class="constant">PRINTNUMBER_BIP</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DQUOTED_ISTT</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINT_BIP</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP31">InterSchemas::de_escape_text</a></span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">PRINTRET_I6RW</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">save_next</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">STATEMENT_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">PRINT_BIP</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP15">InterSchemas::add_token_to_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">, </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">DQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"\n"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1));</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">STATEMENT_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">RETURN_BIP</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">save_next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STYLE_I6RW:</span><span class="plain"> {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"roman"</span><span class="plain">))) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">STYLEROMAN_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"bold"</span><span class="plain">))) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">STYLEBOLD_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"underline"</span><span class="plain">))) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">STYLEUNDERLINE_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"reverse"</span><span class="plain">))) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">STYLEREVERSE_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">subordinate_to</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INVERSION_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">INVERSION_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FONT_I6RW:</span><span class="plain"> {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">FONT_BIP</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"on"</span><span class="plain">))) </span><span class="identifier">dangle</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"off"</span><span class="plain">))) </span><span class="identifier">dangle</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OBJECTLOOP_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">OBJECTLOOP_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SWITCH_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">SWITCH_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IF_I6RW:</span><span class="plain"> {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">IF_BIP</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">next_isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">next_isn</span><span class="plain">) &amp;&amp; (</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">ELSE_I6RW</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">IFELSE_BIP</span><span class="plain">;</span>
<span class="identifier">operand2_node</span><span class="plain"> = </span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FOR_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">FOR_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WHILE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">WHILE_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DO_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">DO_BIP</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">next_isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">next_isn</span><span class="plain">) &amp;&amp; (</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">RESERVED_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> == </span><span class="constant">UNTIL_I6RW</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">next_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"do without until"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">JUMP_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">JUMP_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RETURN_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">RETURN_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RTRUE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">RETURN_BIP</span><span class="plain">;</span>
<span class="identifier">dangle</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RFALSE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">RETURN_BIP</span><span class="plain">;</span>
<span class="identifier">dangle</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BREAK_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">BREAK_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONTINUE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">CONTINUE_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">QUIT_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">QUIT_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">RESTORE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">RESTORE_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SPACES_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">SPACES_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEWLINE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PRINT_BIP</span><span class="plain">;</span>
<span class="identifier">dangle_text</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"\n"</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MOVE_I6RW:</span><span class="plain"> {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"to"</span><span class="plain">)) {</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">operand2</span><span class="plain">) &amp;&amp; (</span><span class="identifier">operand2</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">operand2</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">operand1</span><span class="plain">) &amp;&amp; (</span><span class="identifier">operand2</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">MOVE_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">READ_I6RW:</span><span class="plain"> {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain">-&gt;</span><span class="identifier">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain">-&gt;</span><span class="identifier">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">operand1</span><span class="plain">) &amp;&amp; (</span><span class="identifier">operand2</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">READ_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REMOVE_I6RW:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">REMOVE_BIP</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GIVE_I6RW:</span><span class="plain"> {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain">-&gt;</span><span class="identifier">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPERATOR_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> == </span><span class="constant">BITWISENOT_BIP</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">TAKE_BIP</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">GIVE_BIP</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISNT</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">dir_clarifier</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">)</span>
<span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPCODE_ISTT</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"@push"</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PUSH_BIP</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"@pull"</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="constant">PULL_BIP</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">ASSEMBLY_ISNT</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">prev_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">?(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">?(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"-"</span><span class="plain">))) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="string">"-%S"</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">);</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">NUMBER_ISTT</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"-&gt;"</span><span class="plain">)) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">ASM_ARROW_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sp"</span><span class="plain">)) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">ASM_SP_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"?"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">)) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">ASM_LABEL_ISTT</span><span class="plain">;</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"~"</span><span class="plain">)) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> = </span><span class="constant">ASM_NEGATED_LABEL_ISTT</span><span class="plain">;</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prev_node</span><span class="plain">) </span><span class="identifier">prev_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">prev_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">subordinate_to</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand1</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">operand1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="identifier">subordinate_to</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">STATEMENT_ISNT</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dangle</span><span class="plain"> != </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">dangle</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">NUMBER_ISTT</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dangle_text</span><span class="plain">) {</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">DQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">dangle_text</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP31">InterSchemas::de_escape_text</a></span><span class="plain">(</span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand2</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">subordinate_to</span><span class="plain"> == </span><span class="constant">IFELSE_BIP</span><span class="plain">) {</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_new_isn</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">operand2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">))</span>
<span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand2_node</span><span class="plain">) {</span>
<span class="identifier">operand2_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">operand2_node</span><span class="plain">;</span>
<span class="identifier">operand2_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">operand2_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">operand2_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> != </span><span class="constant">ASSEMBLY_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> != </span><span class="constant">DIRECTIVE_ISNT</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP26">InterSchemas::identify_constructs</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP27"></a><b>&#167;27. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::treat_constructs<button class="popup" onclick="togglePopup('usagePopup164')">...<span class="popuptext" id="usagePopup164">Usage of <b>InterSchemas::treat_constructs</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">FOR_BIP</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">predicates</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">predicates</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">predicates</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> != </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">))</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"malformed proto-for"</span><span class="plain">);</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">predicates</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">code_node</span><span class="plain"> = </span><span class="identifier">predicates</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">cw</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">[3], *</span><span class="identifier">to</span><span class="plain">[3];</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;3; </span><span class="identifier">i</span><span class="plain">++) { </span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="constant">0</span><span class="plain">; }</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">bl</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span>&lt;<span class="cwebmacro">End a wodge</span> <span class="cwebmacronumber">27.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COLON_ISTT</span><span class="plain">) </span>&lt;<span class="cwebmacro">End a wodge</span> <span class="cwebmacronumber">27.1</span>&gt;
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cw</span><span class="plain"> != </span><span class="constant">3</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"malformed for prototype"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;3; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">eval_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EVAL_ISNT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">eval_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">eval_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">eval_isn</span><span class="plain">;</span>
<span class="identifier">eval_isn</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain"> = </span><span class="identifier">code_node</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">eval_isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">expr_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">eval_isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain"> = </span><span class="identifier">expr_isn</span><span class="plain">;</span>
<span class="identifier">expr_isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain"> = </span><span class="identifier">eval_isn</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">m</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">m</span><span class="plain">) &amp;&amp; (</span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">m</span><span class="plain"> = </span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">expr_isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain"> = </span><span class="identifier">m</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">m</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]) </span><span class="identifier">expr_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">m</span><span class="plain">) {</span>
<span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">expr_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]) </span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">m</span><span class="plain"> = </span><span class="identifier">m</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP27">InterSchemas::treat_constructs</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP27_1"></a><b>&#167;27.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">End a wodge</span> <span class="cwebmacronumber">27.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] == </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">]) { </span><span class="identifier">from</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">to</span><span class="plain">[</span><span class="identifier">cw</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">; }</span>
<span class="identifier">cw</span><span class="plain">++;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP27">&#167;27</a> (twice).</p>
<p class="inwebparagraph"><a id="SP28"></a><b>&#167;28. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::add_missing_bodies<button class="popup" onclick="togglePopup('usagePopup165')">...<span class="popuptext" id="usagePopup165">Usage of <b>InterSchemas::add_missing_bodies</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">IF_BIP</span><span class="plain">)) </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">IFELSE_BIP</span><span class="plain">)) </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">FOR_BIP</span><span class="plain">)) </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">WHILE_BIP</span><span class="plain">)) </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">OBJECTLOOP_BIP</span><span class="plain">)) </span><span class="identifier">req</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">req</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">actual</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">ch</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">; </span><span class="identifier">ch</span><span class="plain">; </span><span class="identifier">ch</span><span class="plain">=</span><span class="identifier">ch</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) </span><span class="identifier">actual</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actual</span><span class="plain"> &lt; </span><span class="identifier">req</span><span class="plain">-1) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"far too few child nodes"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actual</span><span class="plain"> &gt; </span><span class="identifier">req</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many child nodes"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">actual</span><span class="plain"> == </span><span class="identifier">req</span><span class="plain">-1) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">code_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">CODE_ISNT</span><span class="plain">);</span>
<span class="identifier">code_isn</span><span class="plain">-&gt;</span><span class="identifier">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">ch</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">ch</span><span class="plain">) &amp;&amp; (</span><span class="identifier">ch</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">)) </span><span class="identifier">ch</span><span class="plain">=</span><span class="identifier">ch</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">ch</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">code_isn</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP6">InterSchemas::mark_unclosed</a></span><span class="plain">(</span><span class="identifier">code_isn</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::add_missing_bodies</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::remove_empties<button class="popup" onclick="togglePopup('usagePopup166')">...<span class="popuptext" id="usagePopup166">Usage of <b>InterSchemas::remove_empties</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prev</span><span class="plain">) </span><span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">par</span><span class="plain">) </span><span class="identifier">par</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">parent_schema</span><span class="plain">-&gt;</span><span class="element">node_tree</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::remove_empties</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::top_level_commas<button class="popup" onclick="togglePopup('usagePopup167')">...<span class="popuptext" id="usagePopup167">Usage of <b>InterSchemas::top_level_commas</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> ( ; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COMMA_ISTT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">prev</span><span class="plain">)) {</span>
<span class="identifier">prev</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) { </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">; }</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">saved</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">semicolon_terminated</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::top_level_commas</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::debracket<button class="popup" onclick="togglePopup('usagePopup168')">...<span class="popuptext" id="usagePopup168">Usage of <b>InterSchemas::debracket</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::outer_subexpressions</a></span><span class="plain">(</span><span class="identifier">par</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::op_subexpressions</a></span><span class="plain">(</span><span class="identifier">par</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::place_calls</a></span><span class="plain">(</span><span class="identifier">par</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::outer_subexpressions<button class="popup" onclick="togglePopup('usagePopup169')">...<span class="popuptext" id="usagePopup169">Usage of <b>InterSchemas::outer_subexpressions</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> ( ; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">fails</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">, *</span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">fails</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">fails</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain">) &amp;&amp; (</span><span class="identifier">to</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain"> != </span><span class="identifier">to</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">SUBEXPRESSION_ISNT</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::outer_subexpressions</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::prefer_over<button class="popup" onclick="togglePopup('usagePopup170')">...<span class="popuptext" id="usagePopup170">Usage of <b>InterSchemas::prefer_over</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">existing</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">existing</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP32">InterSchemas::precedence</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) &lt; </span><span class="functiontext"><a href="#SP32">InterSchemas::precedence</a></span><span class="plain">(</span><span class="identifier">existing</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="#SP32">InterSchemas::precedence</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="functiontext"><a href="#SP32">InterSchemas::precedence</a></span><span class="plain">(</span><span class="identifier">existing</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext"><a href="#SP32">InterSchemas::right_associative</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext"><a href="#SP32">InterSchemas::arity</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="constant">2</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext"><a href="#SP32">InterSchemas::arity</a></span><span class="plain">(</span><span class="identifier">existing</span><span class="plain">) == </span><span class="constant">2</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::op_subexpressions<button class="popup" onclick="togglePopup('usagePopup171')">...<span class="popuptext" id="usagePopup171">Usage of <b>InterSchemas::op_subexpressions</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> ( ; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">node_marked</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">node_marked</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">best_operator</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">break_at</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPERATOR_ISTT</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">this_operator</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::prefer_over</a></span><span class="plain">(</span><span class="identifier">this_operator</span><span class="plain">, </span><span class="identifier">best_operator</span><span class="plain">)) {</span>
<span class="identifier">break_at</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">best_operator</span><span class="plain"> = </span><span class="identifier">this_operator</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">break_at</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">, *</span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">break_at</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">has_operand_before</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">has_operand_after</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain"> != </span><span class="identifier">to</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">has_operand_before</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">best_operator</span><span class="plain"> == </span><span class="constant">IN_BIP</span><span class="plain">) {</span>
<span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="identifier">ist_type</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="identifier">operation_primitive</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">break_at</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">break_at</span><span class="plain">) {</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="identifier">from</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain"> != </span><span class="identifier">to</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">has_operand_after</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">OPERATION_ISNT</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> == </span><span class="constant">MINUS_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">has_operand_before</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">has_operand_before</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">has_operand_before</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">break_at</span><span class="plain">-&gt;</span><span class="element">operation_primitive</span><span class="plain"> == </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">has_operand_before</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">LABEL_ISNT</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">has_operand_before</span><span class="plain">) </span><span class="identifier">a</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">has_operand_after</span><span class="plain">) </span><span class="identifier">a</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">a</span><span class="plain"> != </span><span class="functiontext"><a href="#SP32">InterSchemas::arity</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain">)) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Seem to have arity %d with isn %S which needs %d\n"</span><span class="plain">,</span>
<span class="identifier">a</span><span class="plain">, </span><span class="functiontext"><a href="1-ip.html#SP2">Primitives::name</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain">),</span>
<span class="functiontext"><a href="#SP32">InterSchemas::arity</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain">));</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"$1\n"</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad arity"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::op_subexpressions</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::place_calls<button class="popup" onclick="togglePopup('usagePopup172')">...<span class="popuptext" id="usagePopup172">Usage of <b>InterSchemas::place_calls</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> ( ; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">term_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">tops</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">opener</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">closer</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) { </span><span class="identifier">opener</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">closer</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">term_count</span><span class="plain">++; }</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) { </span><span class="identifier">closer</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; }</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">tops</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">term_count</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) &amp;&amp; (</span><span class="identifier">tops</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">opener</span><span class="plain">) &amp;&amp; (</span><span class="identifier">closer</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Call brackets found</span> <span class="cwebmacronumber">28.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">opener</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">closer</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pre_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">pre_bracings</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">post_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">veto</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">opener</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">opener</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">veto</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">closer</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="identifier">closer</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> != </span><span class="constant">INLINE_ISTT</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">opener</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">pre_count</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">opener</span><span class="plain">) &amp;&amp; (</span><span class="identifier">closer</span><span class="plain">)) </span><span class="identifier">post_count</span><span class="plain">++;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">opener</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">pre_bracings</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">pre_count</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) || ((</span><span class="identifier">pre_count</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">pre_bracings</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">post_count</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">opener</span><span class="plain">) &amp;&amp; (</span><span class="identifier">closer</span><span class="plain">) &amp;&amp; (</span><span class="identifier">veto</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Call brackets found</span> <span class="cwebmacronumber">28.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">InterSchemas::place_calls</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP28_1"></a><b>&#167;28.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Call brackets found</span> <span class="cwebmacronumber">28.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">, *</span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">opener</span><span class="plain">, *</span><span class="identifier">resume</span><span class="plain"> = </span><span class="identifier">opener</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Relegate node</span> <span class="cwebmacronumber">28.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">resume</span><span class="plain">; </span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain"> != </span><span class="identifier">closer</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">OPEN_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">CLOSE_ROUND_ISTT</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">ist_type</span><span class="plain"> == </span><span class="constant">COMMA_ISTT</span><span class="plain">)) {</span>
<span class="identifier">to</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">resume</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Relegate node</span> <span class="cwebmacronumber">28.1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">from</span><span class="plain"> = </span><span class="identifier">resume</span><span class="plain">; </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">to</span><span class="plain"> = </span><span class="identifier">closer</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Relegate node</span> <span class="cwebmacronumber">28.1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">CALL_ISNT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a> (twice).</p>
<p class="inwebparagraph"><a id="SP28_1_1"></a><b>&#167;28.1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Relegate node</span> <span class="cwebmacronumber">28.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain">) &amp;&amp; (</span><span class="identifier">to</span><span class="plain">) &amp;&amp; (</span><span class="identifier">from</span><span class="plain"> != </span><span class="identifier">to</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">l</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">=</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> == </span><span class="identifier">to</span><span class="plain">) </span><span class="identifier">l</span><span class="plain">-&gt;</span><span class="element">next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">xisn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">xisn</span><span class="plain">) &amp;&amp; (</span><span class="identifier">xisn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">)) </span><span class="identifier">xisn</span><span class="plain"> = </span><span class="identifier">xisn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">xisn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">new_isn</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28_1">&#167;28.1</a> (three times).</p>
<p class="inwebparagraph"><a id="SP29"></a><b>&#167;29. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::implied_return_values<button class="popup" onclick="togglePopup('usagePopup173')">...<span class="popuptext" id="usagePopup173">Usage of <b>InterSchemas::implied_return_values</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">STATEMENT_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">RETURN_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">InterSchemas::new_node</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain"> = </span><span class="functiontext"><a href="#SP11">InterSchemas::new_token</a></span><span class="plain">(</span><span class="constant">NUMBER_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"1"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, -1);</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">expression_tokens</span><span class="plain">-&gt;</span><span class="element">owner</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP29">InterSchemas::implied_return_values</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::message_calls<button class="popup" onclick="togglePopup('usagePopup174')">...<span class="popuptext" id="usagePopup174">Usage of <b>InterSchemas::message_calls</b>:<br><a href="#SP20_4">&#167;20.4</a></span></button></span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> == </span><span class="constant">OPERATION_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> == </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">CALL_ISNT</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">obj</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">MESSAGE_ISNT</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_clarifier</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">obj</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">message</span><span class="plain">; </span><span class="identifier">message</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">message</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">message</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">message</span><span class="plain">-&gt;</span><span class="identifier">expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="element">material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">))) {</span>
<span class="identifier">obj</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">isn_type</span><span class="plain"> = </span><span class="constant">CALLMESSAGE_ISNT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">args</span><span class="plain">) { </span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">args</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">next_node</span><span class="plain">; }</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP30">InterSchemas::message_calls</a></span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="element">child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::de_escape_text<button class="popup" onclick="togglePopup('usagePopup175')">...<span class="popuptext" id="usagePopup175">Usage of <b>InterSchemas::de_escape_text</b>:<br><a href="#SP20_2_2">&#167;20.2.2</a>, <a href="#SP26">&#167;26</a></span></button></span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">m</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">run_start</span><span class="plain"> = -1, </span><span class="identifier">run_len</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">run_includes</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">m</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">m</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">' '</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\t'</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\n'</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">run_start</span><span class="plain"> == -1) {</span>
<span class="identifier">run_start</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
<span class="identifier">run_len</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">run_includes</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">run_len</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\n'</span><span class="plain">) </span><span class="identifier">run_includes</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">run_start</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="identifier">run_includes</span><span class="plain">)) {</span>
<span class="identifier">Str::put_at</span><span class="plain">(</span><span class="identifier">m</span><span class="plain">, </span><span class="identifier">run_start</span><span class="plain">, </span><span class="character">' '</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">run_len</span><span class="plain">-1; </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="identifier">Str::delete_nth_character</span><span class="plain">(</span><span class="identifier">m</span><span class="plain">, </span><span class="identifier">run_start</span><span class="plain">+1);</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">run_start</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">run_start</span><span class="plain"> = -1;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">m</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'^'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\n'</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'~'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\"'</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP32"></a><b>&#167;32. Operators in I6. </b>The following routines return data which is essentially the content of the
table shown in section 6.2 of the Inform 6 Technical Manual: which operators
take precedence over which others, which are right or left associative,
which are prefix or postfix, and so on.
</p>
<p class="inwebparagraph">The superclass operator <code class="display"><span class="extract">::</span></code> is not allowed in schemas, but nor is it needed.
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">UNPRECEDENTED_OPERATOR</span><span class="plain"> </span><span class="constant">10000</span>
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::precedence<button class="popup" onclick="togglePopup('usagePopup176')">...<span class="popuptext" id="usagePopup176">Usage of <b>InterSchemas::precedence</b>:<br><a href="#SP28">&#167;28</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STORE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">AND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">EQ_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HAS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HASNT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OFCLASS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROVIDES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOTIN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">ALTERNATIVE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">ALTERNATIVECASE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PLUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">5</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">5</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">TIMES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DIVIDE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MODULO_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEAND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEOR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISENOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">6</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUP_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">7</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUPBYTE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">7</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">8</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">9</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">9</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">9</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">9</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYADDRESS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">10</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">10</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">12</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">UNPRECEDENTED_OPERATOR</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::first_operand_ref<button class="popup" onclick="togglePopup('usagePopup177')">...<span class="popuptext" id="usagePopup177">Usage of <b>InterSchemas::first_operand_ref</b>:<br>Emitting Inter Schemas - <a href="2-eis.html#SP3_8">&#167;3.8</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STORE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterSchemas::text_form<button class="popup" onclick="togglePopup('usagePopup178')">...<span class="popuptext" id="usagePopup178">Usage of <b>InterSchemas::text_form</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STORE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"="</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">AND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&amp;&amp;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"||"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"~~"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">EQ_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"=="</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&gt;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&gt;="</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&lt;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&lt;="</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"~="</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HAS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"has"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HASNT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"hasnt"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OFCLASS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"ofclass"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROVIDES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"provides"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"in"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOTIN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"notin"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">ALTERNATIVE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"or"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PLUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"+"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"-"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">TIMES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"*"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DIVIDE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"/"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MODULO_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"%"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEAND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"&amp;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEOR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"|"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISENOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"~"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUP_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"--&gt;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUPBYTE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"-&gt;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"-"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"++"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"++"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"--"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYADDRESS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">".&amp;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">".#"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"."</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"???"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::arity<button class="popup" onclick="togglePopup('usagePopup179')">...<span class="popuptext" id="usagePopup179">Usage of <b>InterSchemas::arity</b>:<br><a href="#SP28">&#167;28</a>, Emitting Inter Schemas - <a href="2-eis.html#SP3_8">&#167;3.8</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STORE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">AND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">ALTERNATIVE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">ALTERNATIVECASE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">EQ_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HAS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">HASNT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OFCLASS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROVIDES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOTIN_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PLUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">TIMES_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DIVIDE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MODULO_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEAND_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISEOR_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISENOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUP_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">LOOKUPBYTE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYADDRESS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::prefix<button class="popup" onclick="togglePopup('usagePopup180')">...<span class="popuptext" id="usagePopup180">Usage of <b>InterSchemas::prefix</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">NOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BITWISENOT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::right_associative<button class="popup" onclick="togglePopup('usagePopup181')">...<span class="popuptext" id="usagePopup181">Usage of <b>InterSchemas::right_associative</b>:<br><a href="#SP28">&#167;28</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STORE_BIP</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP33"></a><b>&#167;33. Metadata on inter primitives. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::ip_arity<button class="popup" onclick="togglePopup('usagePopup182')">...<span class="popuptext" id="usagePopup182">Usage of <b>InterSchemas::ip_arity</b>:<br>Emitting Inter Schemas - <a href="2-eis.html#SP3_10">&#167;3.10</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STYLEROMAN_BIP</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STYLEBOLD_BIP</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STYLEUNDERLINE_BIP</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">STYLEREVERSE_BIP</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">INVERSION_BIP</span><span class="plain">)) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">BREAK_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">CONTINUE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">QUIT_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">MOVE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">GIVE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">TAKE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DEFAULT_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">CASE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">SWITCH_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OBJECTLOOP_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IF_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IFELSE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">FOR_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">WHILE_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DO_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">READ_BIP</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::ip_loopy<button class="popup" onclick="togglePopup('usagePopup183')">...<span class="popuptext" id="usagePopup183">Usage of <b>InterSchemas::ip_loopy</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">loopy</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">OBJECTLOOP_BIP</span><span class="plain">) </span><span class="identifier">loopy</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">FOR_BIP</span><span class="plain">) </span><span class="identifier">loopy</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">WHILE_BIP</span><span class="plain">) </span><span class="identifier">loopy</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DO_BIP</span><span class="plain">) </span><span class="identifier">loopy</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">loopy</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::ip_prim_cat<button class="popup" onclick="togglePopup('usagePopup184')">...<span class="popuptext" id="usagePopup184">Usage of <b>InterSchemas::ip_prim_cat</b>:<br>Emitting Inter Schemas - <a href="2-eis.html#SP3_10">&#167;3.10</a></span></button></span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">O</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">JUMP_BIP</span><span class="plain">) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">LAB_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">RESTORE_BIP</span><span class="plain">) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">LAB_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">PULL_BIP</span><span class="plain">) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IF_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">SWITCH_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">CASE_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">DEFAULT_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">O</span><span class="plain"> == </span><span class="constant">IFELSE_BIP</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> &gt;= </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="#SP33">InterSchemas::ip_loopy</a></span><span class="plain">(</span><span class="identifier">O</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> == </span><span class="functiontext"><a href="#SP33">InterSchemas::ip_arity</a></span><span class="plain">(</span><span class="identifier">O</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">)) </span><span class="identifier">ok</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ok</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 2: Blueprints.)</i></li><li><a href="2-eis.html">Continue with 'Emitting Inter Schemas'</a></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>