1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-17 06:24:24 +03:00
inform7/docs/codegen-module/3-cal.html

501 lines
114 KiB
HTML
Raw Normal View History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
2020-04-14 19:56:54 +03:00
<title>Constants and Literals</title>
2020-03-19 02:11:25 +02:00
<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">
2020-03-19 02:11:25 +02:00
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
2020-04-14 19:56:54 +03:00
</head>
<body>
2020-03-19 02:11:25 +02:00
<nav role="navigation">
2020-04-14 19:56:54 +03:00
<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>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
</ul><h2>Compiler Webs</h2><ul>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
2020-03-19 02:11:25 +02:00
<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>
2020-04-14 19:56:54 +03:00
<li><a href="../problems-module/index.html">problems</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../index-module/index.html">index</a></li>
2020-04-14 19:56:54 +03:00
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
2020-03-19 02:11:25 +02:00
<li><a href="../building-module/index.html">building</a></li>
2020-04-14 19:56:54 +03:00
<li><a href="index.html"><span class="selectedlink">codegen</span></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>
2020-03-19 02:11:25 +02:00
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
2020-04-14 19:56:54 +03:00
</ul>
2020-03-19 02:11:25 +02:00
</nav>
<main role="main">
2020-04-14 19:56:54 +03:00
<!--Weave of 'Constants and Literals' 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">codegen</a></li><li><a href="index.html#3">Chapter 3: Inter to Final Code</a></li><li><b>Constants and Literals</b></li></ul><p class="purpose">To generate final code for constants, including arrays.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b></p>
2019-06-29 15:17:29 +03:00
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">the_quartet_found</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">box_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::prepare<button class="popup" onclick="togglePopup('usagePopup131')">...<span class="popuptext" id="usagePopup131">Usage of <b>CodeGen::CL::prepare</b>:<br>Code Generation - <a href="3-cg.html#SP8_1">&#167;8.1</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">) {</span>
2019-06-29 15:17:29 +03:00
<span class="identifier">the_quartet_found</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">box_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span><span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">Inter::Tree::traverse</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">-&gt;</span><span class="element">from</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP1">CodeGen::CL::quartet_visitor</a></span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">CONSTANT_IST</span><span class="plain">);</span>
2020-01-13 13:02:57 +02:00
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::quartet_visitor<button class="popup" onclick="togglePopup('usagePopup132')">...<span class="popuptext" id="usagePopup132">Usage of <b>CodeGen::CL::quartet_visitor</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
2020-01-13 13:02:57 +02:00
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</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">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"thedark"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformLibrary"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformParser"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Compass"</span><span class="plain">)))</span>
<span class="identifier">the_quartet_found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::quartet_present<button class="popup" onclick="togglePopup('usagePopup133')">...<span class="popuptext" id="usagePopup133">Usage of <b>CodeGen::CL::quartet_present</b>:<br>Instances and Properties - <a href="3-iap.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
2020-01-13 13:02:57 +02:00
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">the_quartet_found</span><span class="plain">;</span>
2019-06-29 15:17:29 +03:00
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
2019-07-13 19:15:26 +03:00
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">response_traverse_state</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NR</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">response_traverse_state</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::responses<button class="popup" onclick="togglePopup('usagePopup134')">...<span class="popuptext" id="usagePopup134">Usage of <b>CodeGen::CL::responses</b>:<br>Code Generation - <a href="3-cg.html#SP8_3">&#167;8.3</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">) {</span>
2019-07-13 19:15:26 +03:00
<span class="reserved">response_traverse_state</span><span class="plain"> </span><span class="identifier">rts</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">rts</span><span class="plain">.</span><span class="element">NR</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">rts</span><span class="plain">.</span><span class="element">gen</span><span class="plain"> = </span><span class="identifier">gen</span><span class="plain">;</span>
<span class="identifier">Inter::Tree::traverse</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">-&gt;</span><span class="element">from</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP3">CodeGen::CL::response_visitor</a></span><span class="plain">, &amp;</span><span class="identifier">rts</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">RESPONSE_IST</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rts</span><span class="plain">.</span><span class="element">NR</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::constant_segment</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">));</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::begin_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NO_RESPONSES"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">rts</span><span class="plain">.</span><span class="element">NR</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::end_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NO_RESPONSES"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::default_segment</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">));</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"Array ResponseTexts --&gt; "</span><span class="plain">);</span>
<span class="identifier">Inter::Tree::traverse</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">-&gt;</span><span class="element">from</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP3">CodeGen::CL::response_revisitor</a></span><span class="plain">, </span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">RESPONSE_IST</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"0 0;\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
2019-07-13 19:15:26 +03:00
<p class="endnote">The structure response_traverse_state is private to this section.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::response_visitor<button class="popup" onclick="togglePopup('usagePopup135')">...<span class="popuptext" id="usagePopup135">Usage of <b>CodeGen::CL::response_visitor</b>:<br><a href="3-cal.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
2019-07-13 19:15:26 +03:00
<span class="reserved">response_traverse_state</span><span class="plain"> *</span><span class="identifier">rts</span><span class="plain"> = (</span><span class="reserved">response_traverse_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::general_segment</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">));</span>
2019-07-13 19:15:26 +03:00
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">resp_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_RESPONSE_IFLD</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::begin_constant</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">resp_name</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">NR</span><span class="plain"> = </span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">NR</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">NR</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::end_constant</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">resp_name</span><span class="plain">));</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">rts</span><span class="plain">-&gt;</span><span class="element">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::response_revisitor<button class="popup" onclick="togglePopup('usagePopup136')">...<span class="popuptext" id="usagePopup136">Usage of <b>CodeGen::CL::response_revisitor</b>:<br><a href="3-cal.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
2019-07-13 19:15:26 +03:00
<span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain"> = (</span><span class="reserved">code_generation</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">),</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_RESPONSE_IFLD</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_RESPONSE_IFLD</span><span class="plain">+1], </span><span class="identifier">FALSE</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">" "</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>There's a contrivance here to get around an awkward point of I6 syntax:
an array written in the form
</p>
<pre class="display">
2020-04-08 01:02:44 +03:00
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> </span><span class="identifier">table</span><span class="plain"> </span><span class="constant">20</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph">makes a table with 20 entries, not a table with one entry whose initial value
is 20. We instead compile this as
</p>
<pre class="display">
2020-04-08 01:02:44 +03:00
<span class="reserved">Array</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> --&gt; </span><span class="constant">1</span><span class="plain"> </span><span class="constant">20</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
</pre>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant<button class="popup" onclick="togglePopup('usagePopup137')">...<span class="popuptext" id="usagePopup137">Usage of <b>CodeGen::CL::constant</b>:<br>Frame Control - <a href="3-fc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">INLINE_ARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">FAKE_ACTION_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">fa</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Fake_Action %S;\n"</span><span class="plain">, </span><span class="identifier">fa</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ifndef_me</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">VENEER_IANN</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="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"WORDSIZE"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TARGET_ZCODE"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"INDIV_PROP_START"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TARGET_GLULX"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"DICT_WORD_SIZE"</span><span class="plain">)) ||</span>
2019-09-07 22:43:31 +03:00
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"DEBUG"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cap_short_name"</span><span class="plain">)))</span>
<span class="identifier">ifndef_me</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">OBJECT_IANN</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="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release"</span><span class="plain">)) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Release "</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\n"</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">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Story"</span><span class="plain">)) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Global Story = "</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\n"</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">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Serial"</span><span class="plain">)) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Serial "</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\n"</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">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UUID_ARRAY"</span><span class="plain">)) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::Node::ID_to_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Array UUID_ARRAY string \"UUID://"</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">S</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="identifier">WRITE</span><span class="plain">(</span><span class="string">"%c"</span><span class="plain">, </span><span class="identifier">Characters::toupper</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"//\";\n"</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">Inter::Constant::is_routine</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">)) {</span>
2019-07-27 13:16:22 +03:00
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain"> = </span><span class="identifier">Inter::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[ %S"</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + </span><span class="constant">2</span><span class="plain">;</span>
2019-07-27 13:16:22 +03:00
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Packages::definition</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-fc.html#SP1">CodeGen::FC::frame</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">]) {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_INDIRECT_TEXT:</span><span class="plain"> {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::Node::ID_to_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::begin_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"%S\""</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::end_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_INDIRECT_LIST:</span><span class="plain"> {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"--&gt;"</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">unsub</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> = (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain"> - </span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">)/2;</span>
2020-04-07 03:06:09 +03:00
<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="identifier">do_not_bracket</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">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BYTEARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">format</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">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">TABLEARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) {</span>
<span class="identifier">format</span><span class="plain"> = </span><span class="string">"table"</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain"> - </span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"--&gt; 1"</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BUFFERARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"buffer"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">STRINGARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) { </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"string"</span><span class="plain">; </span><span class="identifier">do_not_bracket</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">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">VERBARRAY_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Verb "</span><span class="plain">); </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">unsub</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">METAVERB_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"meta "</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Array %S %s"</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">format</span><span class="plain">);</span>
<span class="plain">}</span>
2019-07-24 22:29:29 +03:00
<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">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">do_not_bracket</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</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="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1], </span><span class="identifier">unsub</span><span class="plain">);</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">do_not_bracket</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</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="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_SUM_LIST:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PRODUCT_LIST:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIFFERENCE_LIST:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_QUOTIENT_LIST:</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="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">depth</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) {</span>
2020-01-13 13:02:57 +02:00
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">CONSTANT_DEPTH_CALCULATION</span><span class="plain">,</span>
2020-04-07 03:06:09 +03:00
<span class="string">"Con %S has depth %d\n"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::basic_constant_segment</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::begin_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
2019-07-24 22:29:29 +03:00
<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">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">) </span><span class="identifier">WRITE</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">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">) </span><span class="identifier">WRITE</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">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">) </span><span class="identifier">WRITE</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">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" / "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2019-07-24 22:29:29 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) || (</span><span class="identifier">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]))) </span><span class="identifier">bracket</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">bracket</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</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="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1], </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bracket</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::end_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIRECT:</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="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">depth</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">CONSTANT_DEPTH_CALCULATION</span><span class="plain">,</span>
<span class="string">"Con %S has depth %d\n"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::basic_constant_segment</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#ifndef %S;\n"</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::begin_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">];</span>
<span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::literal</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="4-ft.html#SP11">CodeGen::Targets::end_constant</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" #endif;\n"</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">default:</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"ungenerated constant format"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant_depth<button class="popup" onclick="togglePopup('usagePopup138')">...<span class="popuptext" id="usagePopup138">Usage of <b>CodeGen::CL::constant_depth</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">) {</span>
<span class="identifier">LOG_INDENT</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="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth_inner</a></span><span class="plain">(</span><span class="identifier">con</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">CONSTANT_DEPTH_CALCULATION</span><span class="plain">, </span><span class="string">"%S has depth %d\n"</span><span class="plain">, </span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">d</span><span class="plain">);</span>
<span class="identifier">LOG_OUTDENT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">d</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant_depth_inner<button class="popup" onclick="togglePopup('usagePopup139')">...<span class="popuptext" id="usagePopup139">Usage of <b>CodeGen::CL::constant_depth_inner</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con</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="constant">1</span><span class="plain">;</span>
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] != </span><span class="identifier">CONSTANT_IST</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">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIRECT</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</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">val1</span><span class="plain"> == </span><span class="identifier">ALIAS_IVAL</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span>
<span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">package</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth</a></span><span class="plain">(</span><span class="identifier">alias</span><span class="plain">) + </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="constant">1</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="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">)) {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">total</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">=</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</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="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">ALIAS_IVAL</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span>
<span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">package</span><span class="plain">));</span>
<span class="identifier">total</span><span class="plain"> += </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::constant_depth</a></span><span class="plain">(</span><span class="identifier">alias</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">total</span><span class="plain">++;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain"> + </span><span class="identifier">total</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">return</span><span class="plain"> </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_literal_holder</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">definition_code</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">literal_content</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">text_literal_holder</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::CL::literal_text_at<button class="popup" onclick="togglePopup('usagePopup140')">...<span class="popuptext" id="usagePopup140">Usage of <b>CodeGen::CL::literal_text_at</b>:<br>Frame Control - <a href="3-fc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">tlh</span><span class="plain">-&gt;</span><span class="element">definition_code</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">tlh</span><span class="plain">-&gt;</span><span class="element">literal_content</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">tlh</span><span class="plain">-&gt;</span><span class="element">definition_code</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::compare_tlh<button class="popup" onclick="togglePopup('usagePopup141')">...<span class="popuptext" id="usagePopup141">Usage of <b>CodeGen::CL::compare_tlh</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">e1</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **) </span><span class="identifier">elem1</span><span class="plain">;</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">e2</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **) </span><span class="identifier">elem2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((*</span><span class="identifier">e1</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (*</span><span class="identifier">e2</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">"Disaster while sorting text literals"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">s1</span><span class="plain"> = (*</span><span class="identifier">e1</span><span class="plain">)-&gt;</span><span class="element">literal_content</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">s2</span><span class="plain"> = (*</span><span class="identifier">e2</span><span class="plain">)-&gt;</span><span class="element">literal_content</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Str::cmp</span><span class="plain">(</span><span class="identifier">s1</span><span class="plain">, </span><span class="identifier">s2</span><span class="plain">);</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::sort_literals<button class="popup" onclick="togglePopup('usagePopup142')">...<span class="popuptext" id="usagePopup142">Usage of <b>CodeGen::CL::sort_literals</b>:<br>Code Generation - <a href="3-cg.html#SP8_3">&#167;8.3</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_tlh</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain">);</span>
<span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">sorted</span><span class="plain"> = (</span><span class="reserved">text_literal_holder</span><span class="plain"> **)</span>
<span class="plain">(</span><span class="identifier">Memory::calloc</span><span class="plain">(</span><span class="identifier">no_tlh</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain"> *), </span><span class="constant">CODE_GENERATION_MREASON</span><span class="plain">));</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">int</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">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">tlh</span><span class="plain">, </span><span class="reserved">text_literal_holder</span><span class="plain">) </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">++] = </span><span class="identifier">tlh</span><span class="plain">;</span>
<span class="identifier">qsort</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">no_tlh</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain"> *), </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::compare_tlh</a></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">no_tlh</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP5">CodeGen::select</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext"><a href="4-ft.html#SP4">CodeGen::Targets::tl_segment</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">TO</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">tlh</span><span class="plain">-&gt;</span><span class="element">definition_code</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="3-cg.html#SP5">CodeGen::deselect</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::enter_box_mode<button class="popup" onclick="togglePopup('usagePopup143')">...<span class="popuptext" id="usagePopup143">Usage of <b>CodeGen::CL::enter_box_mode</b>:<br>Frame Control - <a href="3-fc.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">box_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::exit_box_mode<button class="popup" onclick="togglePopup('usagePopup144')">...<span class="popuptext" id="usagePopup144">Usage of <b>CodeGen::CL::exit_box_mode</b>:<br>Frame Control - <a href="3-fc.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">box_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::enter_print_mode<button class="popup" onclick="togglePopup('usagePopup145')">...<span class="popuptext" id="usagePopup145">Usage of <b>CodeGen::CL::enter_print_mode</b>:<br>Frame Control - <a href="3-fc.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
2020-04-14 19:56:54 +03:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::exit_print_mode<button class="popup" onclick="togglePopup('usagePopup146')">...<span class="popuptext" id="usagePopup146">Usage of <b>CodeGen::CL::exit_print_mode</b>:<br>Frame Control - <a href="3-fc.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::literal<button class="popup" onclick="togglePopup('usagePopup147')">...<span class="popuptext" id="usagePopup147">Usage of <b>CodeGen::CL::literal</b>:<br><a href="3-cal.html#SP3">&#167;3</a>, Frame Control - <a href="3-fc.html#SP2">&#167;2</a><br>Instances and Properties - <a href="3-iap.html#SP5_8_4_1_1">&#167;5.8.4.1.1</a>, <a href="3-iap.html#SP8">&#167;8</a><br>Generating Inform 6 - <a href="4-fi6.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">unsub</span><span class="plain">) {</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">gen</span><span class="plain">-&gt;</span><span class="element">from</span><span class="plain">;</span>
2020-04-14 19:56:54 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext"><a href="3-cg.html#SP7">CodeGen::current</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">hex</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">con_name</span><span class="plain">)</span>
2019-07-26 10:59:23 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Annotations::find</span><span class="plain">(&amp;(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">ann_set</span><span class="plain">), </span><span class="identifier">HEX_IANN</span><span class="plain">)) </span><span class="identifier">hex</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">hex</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"$%x"</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">val2</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">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">aliased</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</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">aliased</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">"bad aliased symbol"</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_divider_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n\t*"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_reverse_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"reverse"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_slash_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"/"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_result_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-&gt;"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_special_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"special"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_number_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"number"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_noun_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"noun"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multi_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multi"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiinside_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiinside"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiheld_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiheld"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_held_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"held"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_creature_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"creature"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_topic_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"topic"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiexcept_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiexcept"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">, </span><span class="identifier">SCOPE_FILTER_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"scope="</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">, </span><span class="identifier">NOUN_FILTER_IANN</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"noun="</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext"><a href="3-cal.html#SP4">CodeGen::CL::name</a></span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"##"</span><span class="plain">))) {</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">)</span>
2020-04-07 03:06:09 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pos</span><span class="plain">.</span><span class="identifier">index</span><span class="plain"> &gt;= </span><span class="constant">2</span><span class="plain">)</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</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">val1</span><span class="plain"> == </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
2020-04-07 03:06:09 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ! %S\n\t"</span><span class="plain">, </span><span class="identifier">divider_text</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">val1</span><span class="plain"> == </span><span class="identifier">REAL_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"$%S"</span><span class="plain">, </span><span class="identifier">glob_text</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">val1</span><span class="plain"> == </span><span class="identifier">DWORD_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="4-ft.html#SP6">CodeGen::Targets::compile_dictionary_word</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">glob_text</span><span class="plain">, </span><span class="identifier">FALSE</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">val1</span><span class="plain"> == </span><span class="identifier">PDWORD_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="4-ft.html#SP6">CodeGen::Targets::compile_dictionary_word</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">glob_text</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">val1</span><span class="plain"> == </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
2020-04-14 19:56:54 +03:00
<span class="functiontext"><a href="4-ft.html#SP7">CodeGen::Targets::compile_literal_text</a></span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">glob_text</span><span class="plain">, </span><span class="identifier">printing_mode</span><span class="plain">, </span><span class="identifier">box_mode</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">val1</span><span class="plain"> == </span><span class="identifier">GLOB_IVAL</span><span class="plain">) {</span>
2019-07-24 22:29:29 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">glob_text</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">"unimplemented direct constant"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::CL::name<button class="popup" onclick="togglePopup('usagePopup148')">...<span class="popuptext" id="usagePopup148">Usage of <b>CodeGen::CL::name</b>:<br><a href="3-cal.html#SP3">&#167;3</a>, Frame Control - <a href="3-fc.html#SP2">&#167;2</a>, <a href="3-fc.html#SP3">&#167;3</a><br>Instances and Properties - <a href="3-iap.html#SP4_5">&#167;4.5</a>, <a href="3-iap.html#SP4_6">&#167;4.6</a>, <a href="3-iap.html#SP5_5">&#167;5.5</a>, <a href="3-iap.html#SP5_7">&#167;5.7</a>, <a href="3-iap.html#SP5_8_4">&#167;5.8.4</a>, <a href="3-iap.html#SP5_9">&#167;5.9</a>, <a href="3-iap.html#SP5_11">&#167;5.11</a>, <a href="3-iap.html#SP5_11_2">&#167;5.11.2</a>, <a href="3-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="3-iap.html#SP5_11_2_2">&#167;5.11.2.2</a>, <a href="3-iap.html#SP6">&#167;6</a>, <a href="3-iap.html#SP8">&#167;8</a><br>Generating Inform 6 - <a href="4-fi6.html#SP5">&#167;5</a>, <a href="4-fi6.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</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">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure text_literal_holder is private to this section.</p>
<hr class="tocbar">
2019-08-28 12:35:44 +03:00
<ul class="toc"><li><a href="3-fc.html">Back to 'Frame Control'</a></li><li><a href="3-iap.html">Continue with 'Instances and Properties'</a></li></ul><hr class="tocbar">
<!--End of weave-->
2020-04-14 19:56:54 +03:00
<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">
2020-03-19 02:11:25 +02:00
</main>
</body>
</html>