mirror of
https://github.com/ganelson/inform.git
synced 2024-07-17 06:24:24 +03:00
432 lines
86 KiB
HTML
432 lines
86 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>4/fc</title>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
|
<meta http-equiv="Content-Language" content="en-gb">
|
||
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<!--Weave of '4/cal' generated by 7-->
|
||
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">codegen</a></li><li><a href="index.html#4">Chapter 4: 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>§1. </b></p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::responses</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_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">>from</span><span class="plain">;</span>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NR</span><span class="plain"> = 0;</span>
|
||
|
<<span class="cwebmacro">Define constants for the responses</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NR</span><span class="plain"> > 0) </span><<span class="cwebmacro">Define an array of the responses</span> <span class="cwebmacronumber">1.2</span>><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::responses is used in 4/cg (<a href="4-cg.html#SP3">§3</a>).</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||
|
<<span class="cwebmacrodefn">Define constants for the responses</span> <span class="cwebmacronumber">1.1</span>> =
|
||
|
</code></p>
|
||
|
|
||
|
|
||
|
<pre class="displaydefn">
|
||
|
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||
|
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</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">RESPONSE_IST</span><span class="plain">) {</span>
|
||
|
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::general_segment</span><span class="plain">(</span><span class="identifier">gen</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">TO</span><span class="plain"> = </span><span class="functiontext">CodeGen::current</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">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="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Constant %S = %d;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">resp_name</span><span class="plain">), ++</span><span class="identifier">NR</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::deselect</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>
|
||
|
|
||
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP1_2"></a><b>§1.2. </b><code class="display">
|
||
|
<<span class="cwebmacrodefn">Define an array of the responses</span> <span class="cwebmacronumber">1.2</span>> =
|
||
|
</code></p>
|
||
|
|
||
|
|
||
|
<pre class="displaydefn">
|
||
|
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::constant_segment</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">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"Constant NO_RESPONSES = %d;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">NR</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::deselect</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">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::default_segment</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">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"Array ResponseTexts --> "</span><span class="plain">);</span>
|
||
|
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||
|
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</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">RESPONSE_IST</span><span class="plain">) {</span>
|
||
|
<span class="identifier">NR</span><span class="plain">++;</span>
|
||
|
<span class="functiontext">CodeGen::CL::literal</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">P</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">.</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>
|
||
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext">CodeGen::current</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>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">), </span><span class="string">"0 0;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::deselect</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
||
|
|
||
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>There's a contrivance here to get around an awkward point of I6 syntax:
|
||
|
an array written in the form
|
||
|
</p>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="plain">Array X table 20;</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>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
|
||
|
<pre class="display">
|
||
|
<span class="plain">Array X --> 1 20;</span>
|
||
|
<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="functiontext">CodeGen::CL::quartet_present</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="plain">#</span><span class="identifier">endif</span>
|
||
|
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">the_quartet_found</span><span class="plain">;</span>
|
||
|
<span class="plain">#</span><span class="identifier">endif</span>
|
||
|
<span class="plain">}</span>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant</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_frame</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">CodeGen::current</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>
|
||
|
|
||
|
<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">) == 1) </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">) == 1) </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">FAKE_ACTION_IANN</span><span class="plain">) == 1) {</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">-></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>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Fake_Action %S;\</span><span class="plain">n</span><span class="string">"</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>
|
||
|
<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">) == 1) </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">-></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">-></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">-></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">-></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">-></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>
|
||
|
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-></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="identifier">ifndef_me</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">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-></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="identifier">the_quartet_found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="comment">WRITE("Object thedark \"(darkness object)\";\n");</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">-></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="identifier">the_quartet_found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="comment">WRITE("Object InformLibrary \"(Inform Library)\" has proper;\n");</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">-></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="identifier">the_quartet_found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||
|
<span class="comment">WRITE("Object InformParser \"(Inform Parser)\" has proper;\n");</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">-></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="comment">WRITE("Object Compass \"compass\" has concealed;\n");</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">-></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>
|
||
|
<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">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</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="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Release "</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::CL::literal</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>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</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">-></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>
|
||
|
<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">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</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="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Global Story = "</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::CL::literal</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>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</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">-></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>
|
||
|
<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">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</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="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Serial "</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::CL::literal</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>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</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">-></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>
|
||
|
<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">.</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::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-></span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Array UUID_ARRAY string \</span><span class="plain">"</span><span class="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"><</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">"//\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</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>
|
||
|
<span class="identifier">inter_symbol</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="reserved">if</span><span class="plain"> (</span><span class="functiontext">CodeGen::Eliminate::gone</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">) == </span><span class="identifier">FALSE</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">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
|
||
|
<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">) + 2;</span>
|
||
|
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::FC::frame</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="plain">}</span>
|
||
|
<span class="reserved">return</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</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="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_INDIRECT_TEXT</span><span class="plain">: {</span>
|
||
|
<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">.</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::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-></span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Constant %S = \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
|
||
|
<span class="reserved">break</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">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">"-->"</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>
|
||
|
<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">.</span><span class="identifier">extent</span><span class="plain"> - </span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">)/2;</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain"> == 1) </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">) == 1) </span><span class="identifier">format</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">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">) == 1) {</span>
|
||
|
<span class="identifier">format</span><span class="plain"> = </span><span class="string">"table"</span><span class="plain">;</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</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><span class="identifier">format</span><span class="plain"> = </span><span class="string">"--> 1"</span><span class="plain">;</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">BUFFERARRAY_IANN</span><span class="plain">) == 1) </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">) == 1) { </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">) == 1) {</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>
|
||
|
<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">) == 1) </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">CodeGen::CL::name</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>
|
||
|
<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"><</span><span class="identifier">P</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>
|
||
|
<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">) && (</span><span class="identifier">P</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">CodeGen::CL::literal</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">.</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">.</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>
|
||
|
<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">) && (</span><span class="identifier">P</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>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||
|
<span class="reserved">break</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">:</span>
|
||
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">:</span>
|
||
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">:</span>
|
||
|
<span class="reserved">case</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">"Constant %S = "</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</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"><</span><span class="identifier">P</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">></span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">) {</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</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">.</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">.</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">.</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>
|
||
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</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">.</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">.</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">CodeGen::CL::literal</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">.</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">.</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="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||
|
<span class="reserved">break</span><span class="plain">;</span>
|
||
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">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">P</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">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</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; "</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</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">"Constant %S = "</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
|
||
|
<span class="functiontext">CodeGen::CL::literal</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="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">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" #endif;"</span><span class="plain">);</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||
|
<span class="reserved">break</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
<span class="reserved">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>
|
||
|
|
||
|
<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>
|
||
|
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::CL::literal_text_at</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>
|
||
|
<span class="identifier">tlh</span><span class="plain">-</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">-</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">-</span><span class="element">>definition_code</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::compare_tlh</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>
|
||
|
<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">)-</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">)-</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>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::sort_literals</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::I7_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>
|
||
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = 0;</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">CodeGen::CL::compare_tlh</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"><</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>
|
||
|
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::tl_segment</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">CodeGen::current</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="identifier">TO</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">tlh</span><span class="plain">-</span><span class="element">>definition_code</span><span class="plain">);</span>
|
||
|
<span class="functiontext">CodeGen::deselect</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>
|
||
|
|
||
|
<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>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::enter_box_mode</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>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::exit_box_mode</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>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::enter_print_mode</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>
|
||
|
|
||
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::exit_print_mode</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</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>
|
||
|
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">>from</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">CodeGen::current</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>
|
||
|
<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"><</span><span class="identifier">con_name</span><span class="plain">-></span><span class="identifier">no_symbol_annotations</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++)</span>
|
||
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con_name</span><span class="plain">-></span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-></span><span class="identifier">annotation_ID</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>
|
||
|
<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">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">t</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_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">"->"</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>
|
||
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) && (</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">) == 1))</span>
|
||
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"scope="</span><span class="plain">);</span>
|
||
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) && (</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">) == 1))</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">CodeGen::CL::name</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">) && (</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>
|
||
|
<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"> >= 2)</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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">n</span><span class="string">\</span><span class="plain">t</span><span class="string">"</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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="functiontext">CodeGen::Targets::compile_dictionary_word</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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="functiontext">CodeGen::Targets::compile_dictionary_word</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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="functiontext">CodeGen::Targets::compile_literal_text</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>
|
||
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</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</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">-></span><span class="identifier">symbol_name</span><span class="plain">;</span>
|
||
|
<span class="plain">}</span>
|
||
|
</pre>
|
||
|
|
||
|
<p class="inwebparagraph"></p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::quartet_present is used in 4/iap (<a href="4-iap.html#SP1">§1</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::constant is used in 4/fc (<a href="4-fc.html#SP2">§2</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::literal_text_at is used in 4/fc (<a href="4-fc.html#SP2">§2</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::compare_tlh appears nowhere else.</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::sort_literals is used in 4/cg (<a href="4-cg.html#SP3">§3</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::enter_box_mode is used in 4/fc (<a href="4-fc.html#SP4">§4</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::exit_box_mode is used in 4/fc (<a href="4-fc.html#SP4">§4</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::enter_print_mode is used in 4/fc (<a href="4-fc.html#SP4">§4</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::exit_print_mode is used in 4/fc (<a href="4-fc.html#SP4">§4</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::literal is used in <a href="#SP1_2">§1.2</a>, 4/fc (<a href="4-fc.html#SP3">§3</a>), 4/iap (<a href="4-iap.html#SP5_8_4_1_1">§5.8.4.1.1</a>, <a href="4-iap.html#SP8">§8</a>), 4/vrb (<a href="4-vrb.html#SP1">§1</a>).</p>
|
||
|
|
||
|
<p class="endnote">The function CodeGen::CL::name is used in <a href="#SP1_1">§1.1</a>, 4/fc (<a href="4-fc.html#SP3">§3</a>, <a href="4-fc.html#SP4">§4</a>), 4/iap (<a href="4-iap.html#SP4_5">§4.5</a>, <a href="4-iap.html#SP4_6">§4.6</a>, <a href="4-iap.html#SP5_5">§5.5</a>, <a href="4-iap.html#SP5_7">§5.7</a>, <a href="4-iap.html#SP5_8_4">§5.8.4</a>, <a href="4-iap.html#SP5_9">§5.9</a>, <a href="4-iap.html#SP5_11">§5.11</a>, <a href="4-iap.html#SP5_11_2">§5.11.2</a>, <a href="4-iap.html#SP5_11_2_1">§5.11.2.1</a>, <a href="4-iap.html#SP5_11_2_2">§5.11.2.2</a>, <a href="4-iap.html#SP6">§6</a>, <a href="4-iap.html#SP8">§8</a>), 4/vrb (<a href="4-vrb.html#SP1">§1</a>), 5/gi6 (<a href="5-gi6.html#SP5">§5</a>).</p>
|
||
|
|
||
|
<p class="endnote">The structure text_literal_holder is private to this section.</p>
|
||
|
|
||
|
<hr class="tocbar">
|
||
|
<ul class="toc"><li><a href="4-fc.html">Back to 'Frame Control'</a></li><li><a href="4-iap.html">Continue with 'Instances and Properties'</a></li></ul><hr class="tocbar">
|
||
|
<!--End of weave-->
|
||
|
</body>
|
||
|
</html>
|
||
|
|