1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

A little closer to working

This commit is contained in:
Graham Nelson 2021-08-27 23:24:11 +01:00
parent 3c04253dd0
commit cef72acc93
15 changed files with 328 additions and 104 deletions

View file

@ -461,11 +461,11 @@ is 20. We instead compile this as
<span class="string-syntax"> return symb-&gt;symbol_name;</span>
<span class="string-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">&#167;1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">&#167;8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::evaluate appears nowhere else.</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">&#167;8</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5_5">&#167;5.5</a>, <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_4">&#167;5.8.4</a>, <a href="2-iap.html#SP5_9">&#167;5.9</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2">&#167;5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>), C Memory Model (<a href="5-cmm.html#SP10">&#167;10</a>), C Object Model (<a href="5-com.html#SP6">&#167;6</a>), C Function Model (<a href="5-cfm.html#SP1">&#167;1</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul>
<ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">&#167;1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">&#167;8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::evaluate appears nowhere else.</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">&#167;8</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5_5">&#167;5.5</a>, <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_4">&#167;5.8.4</a>, <a href="2-iap.html#SP5_9">&#167;5.9</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2">&#167;5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>), C Memory Model (<a href="5-cmm.html#SP11">&#167;11</a>), C Object Model (<a href="5-com.html#SP6">&#167;6</a>), C Function Model (<a href="5-cfm.html#SP1">&#167;1</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP13">&#167;13</a><br/>C Object Model - <a href="5-com.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP14">&#167;14</a><br/>C Object Model - <a href="5-com.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reffed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">REFERENCE_IST</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>

View file

@ -201,7 +201,7 @@ always be done in a way which is then undone, restoring the previous state:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::select</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">&#167;1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">&#167;1</a>, <a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP8_2">&#167;8.2</a>, <a href="5-cmm.html#SP9">&#167;9</a>, <a href="5-cmm.html#SP12">&#167;12</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::select</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">&#167;1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">&#167;1</a>, <a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP9_2">&#167;9.2</a>, <a href="5-cmm.html#SP10">&#167;10</a>, <a href="5-cmm.html#SP13">&#167;13</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_segment</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">MAX_CG_SEGMENTS</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"out of range"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"poorly timed selection"</span><span class="plain-syntax">);</span>
@ -209,7 +209,7 @@ always be done in a way which is then undone, restoring the previous state:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">&#167;1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">&#167;1</a>, <a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP8_2">&#167;8.2</a>, <a href="5-cmm.html#SP9">&#167;9</a>, <a href="5-cmm.html#SP12">&#167;12</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">&#167;1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">&#167;1</a>, <a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP9_2">&#167;9.2</a>, <a href="5-cmm.html#SP10">&#167;10</a>, <a href="5-cmm.html#SP13">&#167;13</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"poorly timed deselection"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_segment</span><span class="plain-syntax"> = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -238,7 +238,7 @@ we also have to direct it to a given text.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/>Frame Control - <a href="2-fc.html#SP2">&#167;2</a>, <a href="2-fc.html#SP3">&#167;3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP4">&#167;4</a>, <a href="4-fi6.html#SP5">&#167;5</a>, <a href="4-fi6.html#SP6">&#167;6</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Namespace - <a href="5-cnm.html#SP3">&#167;3</a><br/>C References - <a href="5-crf.html#SP4">&#167;4</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP8_2">&#167;8.2</a>, <a href="5-cmm.html#SP9">&#167;9</a>, <a href="5-cmm.html#SP10">&#167;10</a>, <a href="5-cmm.html#SP12">&#167;12</a>, <a href="5-cmm.html#SP13">&#167;13</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Arithmetic - <a href="5-car.html#SP1">&#167;1</a><br/>C Conditions - <a href="5-ccn.html#SP1">&#167;1</a>, <a href="5-ccn.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a>, <a href="5-com.html#SP11">&#167;11</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a>, <a href="5-clt.html#SP2">&#167;2</a>, <a href="5-clt.html#SP3">&#167;3</a>, <a href="5-clt.html#SP4">&#167;4</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/>Frame Control - <a href="2-fc.html#SP2">&#167;2</a>, <a href="2-fc.html#SP3">&#167;3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5">&#167;5</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">&#167;3</a>, <a href="4-fi6.html#SP4">&#167;4</a>, <a href="4-fi6.html#SP5">&#167;5</a>, <a href="4-fi6.html#SP6">&#167;6</a>, <a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>, <a href="4-fi6.html#SP9">&#167;9</a><br/>Generating C - <a href="5-fnc.html#SP5">&#167;5</a>, <a href="5-fnc.html#SP6">&#167;6</a><br/>C Namespace - <a href="5-cnm.html#SP3">&#167;3</a><br/>C References - <a href="5-crf.html#SP4">&#167;4</a><br/>C Memory Model - <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4">&#167;4</a>, <a href="5-cmm.html#SP9_2">&#167;9.2</a>, <a href="5-cmm.html#SP10">&#167;10</a>, <a href="5-cmm.html#SP11">&#167;11</a>, <a href="5-cmm.html#SP13">&#167;13</a>, <a href="5-cmm.html#SP14">&#167;14</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Arithmetic - <a href="5-car.html#SP1">&#167;1</a><br/>C Conditions - <a href="5-ccn.html#SP1">&#167;1</a>, <a href="5-ccn.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP1_4">&#167;1.4</a>, <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP10">&#167;10</a>, <a href="5-com.html#SP11">&#167;11</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a>, <a href="5-clt.html#SP2">&#167;2</a>, <a href="5-clt.html#SP3">&#167;3</a>, <a href="5-clt.html#SP4">&#167;4</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segments</span><span class="plain-syntax">[</span><span class="constant-syntax">temporary_I7CGS</span><span class="plain-syntax">]-&gt;</span><span class="element-syntax">generated_code</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_segment</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>

View file

@ -180,7 +180,7 @@ function togglePopup(material_id) {
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">MANGLE_IDENTIFIER_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::mangle</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangle</span></span>:<br/><a href="2-ft.html#SP12">&#167;12</a>, <a href="2-ft.html#SP18">&#167;18</a><br/>Frame Control - <a href="2-fc.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP4_6">&#167;4.6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">&#167;8</a><br/>C Memory Model - <a href="5-cmm.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::mangle</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangle</span></span>:<br/><a href="2-ft.html#SP12">&#167;12</a>, <a href="2-ft.html#SP18">&#167;18</a><br/>Frame Control - <a href="2-fc.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP4_6">&#167;4.6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">&#167;8</a><br/>C Memory Model - <a href="5-cmm.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">MANGLE_IDENTIFIER_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -222,14 +222,10 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_accelfunc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_accelfunc</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_accelfunc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) { /* </span><span class="Extracts-identifier-syntax">Intentionally</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ignore</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_accelparam</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_accelparam</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_accelparam</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) { /* </span><span class="Extracts-identifier-syntax">Intentionally</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ignore</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_copy</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
@ -308,11 +304,6 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_aloads</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_aloads</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_binarysearch</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l2</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l3</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l4</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l5</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l6</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">l7</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">s1</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_binarysearch</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>

View file

@ -127,20 +127,20 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="comment-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXPLICIT_VARIABLE_IANN</span><span class="plain-syntax">) != </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Global_Vars"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Global_Vars"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP6" class="function-link"><span class="function-syntax">CodeGen::select_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cal.html#SP2" class="function-link"><span class="function-syntax">CodeGen::CL::literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Packages::scope_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">VAL1_VAR_IFLD</span><span class="plain-syntax">], </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">VAL2_VAR_IFLD</span><span class="plain-syntax">], </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP6" class="function-link"><span class="function-syntax">CodeGen::deselect_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="identifier-syntax">of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP12" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP13" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">*/</span>

View file

@ -474,6 +474,71 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_C_string</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">room</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_None</span><span class="Extracts-plain-syntax"> (0)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Timer</span><span class="Extracts-plain-syntax"> (1)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_CharInput</span><span class="Extracts-plain-syntax"> (2)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_LineInput</span><span class="Extracts-plain-syntax"> (3)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_MouseInput</span><span class="Extracts-plain-syntax"> (4)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Arrange</span><span class="Extracts-plain-syntax"> (5)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Redraw</span><span class="Extracts-plain-syntax"> (6)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_SoundNotify</span><span class="Extracts-plain-syntax"> (7)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Hyperlink</span><span class="Extracts-plain-syntax"> (8)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_VolumeNotify</span><span class="Extracts-plain-syntax"> (9)</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[32];</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">No</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">available</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">select</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">();</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax"> == -1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">evtype_LineInput</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">] = '</span><span class="Extracts-identifier-syntax">q</span><span class="Extracts-plain-syntax">';</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">+1] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_exit</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0001</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_interrupt_handler</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0002</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_tick</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0003</span>
@ -627,8 +692,20 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_schannel_create</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_style</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_move_cursor</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_position</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_get_size</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">80</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">8</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_lvalue_SET</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_request_line_event</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_select</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_close</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_set_current</span><span class="Extracts-plain-syntax">:</span>

View file

@ -74,17 +74,17 @@ function togglePopup(material_id) {
<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">final</a></li><li><a href="index.html#5">Chapter 5: C</a></li><li><b>C Memory Model</b></li></ul></div>
<p class="purpose">How arrays of all kinds are stored in C.</p>
<ul class="toc"><li><a href="5-cmm.html#SP1">&#167;1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">&#167;2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">&#167;5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP8">&#167;8. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP13">&#167;13. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="5-cmm.html#SP1">&#167;1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">&#167;2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">&#167;5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP9">&#167;9. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP14">&#167;14. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Setting up the model. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::initialise</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::initialise</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::compile_literal_symbol</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP11" class="function-link"><span class="function-syntax">CMemoryModel::array_entries</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP12" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP11" class="function-link"><span class="function-syntax">CMemoryModel::compile_literal_symbol</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP12" class="function-link"><span class="function-syntax">CMemoryModel::array_entries</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP13" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_memory_model_data</span><span class="plain-syntax"> {</span>
@ -218,7 +218,16 @@ express a packed word in constant context, which we will need later.
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>A Glulx assembly opcode is provided for fast memory copies:
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>"Short" 16-bit numbers can also be accessed:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_aloads</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x100</span><span class="Extracts-plain-syntax">*((</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">+2*</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">]) + ((</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7mem</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">+2*</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">+1]);</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>A Glulx assembly opcode is provided for fast memory copies:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
@ -240,7 +249,7 @@ express a packed word in constant context, which we will need later.
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Populating memory with arrays. </b>Inter supports four sorts of arrays, with behaviour as laid out in this 2x2 grid:
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Populating memory with arrays. </b>Inter supports four sorts of arrays, with behaviour as laid out in this 2x2 grid:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -259,14 +268,14 @@ express a packed word in constant context, which we will need later.
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">entry_count</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"unknown"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Work out the format name</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Define a constant for the byte address in memory where the array begins</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Work out the format name</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Define a constant for the byte address in memory where the array begins</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">TABLE_ARRAY_FORMAT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">BUFFER_ARRAY_FORMAT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Place the extent entry N at index 0</span><span class="named-paragraph-number">8.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Place the extent entry N at index 0</span><span class="named-paragraph-number">9.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out the format name</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out the format name</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -277,8 +286,8 @@ express a packed word in constant context, which we will need later.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TABLE_ARRAY_FORMAT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">format_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"table"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b>Crucially, the array names are <span class="extract"><span class="extract-syntax">#define</span></span> constants declared up at the top
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b>Crucially, the array names are <span class="extract"><span class="extract-syntax">#define</span></span> constants declared up at the top
of the source code: they are not variables with pointer types, or something
like that. This means they can legally be used as values elsewhere in <span class="extract"><span class="extract-syntax">i7mem</span></span>,
or as initial values of variables, and so on.
@ -288,7 +297,7 @@ or as initial values of variables, and so on.
because they too are defined constants, equal to their IDs: see <a href="5-com.html" class="internal">C Object Model</a>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Define a constant for the byte address in memory where the array begins</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Define a constant for the byte address in memory where the array begins</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -300,53 +309,53 @@ because they too are defined constants, equal to their IDs: see <a href="5-com.h
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">), </span><span class="identifier-syntax">format_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">array_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3" class="paragraph-anchor"></a><b>&#167;8.3. </b>Of course, right now we don't know <span class="extract"><span class="extract-syntax">N</span></span>, the extent of the array. So we will
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>&#167;9.3. </b>Of course, right now we don't know <span class="extract"><span class="extract-syntax">N</span></span>, the extent of the array. So we will
refer to this with a constant like <span class="extract"><span class="extract-syntax">xt_myarray</span></span>, which we will retrospectively
predefine when the array ends.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Place the extent entry N at index 0</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Place the extent entry N at index 0</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">extname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">extname</span><span class="plain-syntax">, </span><span class="string-syntax">"xt_%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">array_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">extname</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">extname</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">extname</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The call to <span class="extract"><span class="extract-syntax">CMemoryModel::begin_array</span></span> is then followed by a series of calls to:
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The call to <span class="extract"><span class="extract-syntax">CMemoryModel::begin_array</span></span> is then followed by a series of calls to:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::array_entry</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a>, <a href="5-cmm.html#SP8_3">&#167;8.3</a>, <a href="5-cmm.html#SP11">&#167;11</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::array_entry</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a>, <a href="5-cmm.html#SP9_3">&#167;9.3</a>, <a href="5-cmm.html#SP12">&#167;12</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_mem_I7CGS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">TABLE_ARRAY_FORMAT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">This is a word entry</span><span class="named-paragraph-number">9.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">This is a word entry</span><span class="named-paragraph-number">10.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">This is a byte entry</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">This is a byte entry</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">entry_count</span><span class="plain-syntax">)++;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This is a byte entry</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This is a byte entry</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (i7byte) %S, /* %d */\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b>Now we see why it was important for <span class="extract"><span class="extract-syntax">I7BYTE_0</span></span> and so on to be macros: they
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b>Now we see why it was important for <span class="extract"><span class="extract-syntax">I7BYTE_0</span></span> and so on to be macros: they
use only arithmetic operations which can be constant-folded by the C compiler,
and therefore if <span class="extract"><span class="extract-syntax">X</span></span> is a valid constant-context expression in C then so is
<span class="extract"><span class="extract-syntax">I7BYTE_0(X)</span></span>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This is a word entry</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This is a word entry</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -354,8 +363,8 @@ and therefore if <span class="extract"><span class="extract-syntax">X</span></sp
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_literal_symbol</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::compile_literal_symbol</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aliased</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unsub</span><span class="plain-syntax">) {</span>
@ -364,7 +373,7 @@ and therefore if <span class="extract"><span class="extract-syntax">X</span></sp
<span class="plain-syntax"> </span><a href="2-ft.html#SP5" class="function-link"><span class="function-syntax">CodeGen::Targets::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Alternatively, we can just specify how many entries there will be: they will
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Alternatively, we can just specify how many entries there will be: they will
then be initialised to 0.
</p>
@ -372,10 +381,10 @@ then be initialised to 0.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::array_entries</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::array_entries</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">) </span><span class="identifier-syntax">how_many</span><span class="plain-syntax"> += </span><span class="constant-syntax">64</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">how_many</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">how_many</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>When all the entries have been placed, the following is called. It does nothing
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>When all the entries have been placed, the following is called. It does nothing
except to predeclare the extent constant, if one was used.
</p>
@ -390,7 +399,7 @@ except to predeclare the extent constant, if one was used.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Primitives for byte and word lookup. </b>The signatures here are:
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Primitives for byte and word lookup. </b>The signatures here are:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -406,36 +415,36 @@ except to predeclare the extent constant, if one was used.
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::compile_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">13.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">13.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP14_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">14.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">14.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUPBYTE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP13_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">13.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUPBYTE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP14_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">14.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">13.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP14_1" class="paragraph-anchor"></a><b>&#167;14.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">14.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_read_word(i7mem, "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_2" class="paragraph-anchor"></a><b>&#167;13.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_2" class="paragraph-anchor"></a><b>&#167;14.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">14.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_write_word(i7mem, "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_3" class="paragraph-anchor"></a><b>&#167;13.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">13.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_3" class="paragraph-anchor"></a><b>&#167;14.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">14.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7mem["</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" + "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"]"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP13">&#167;13</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP14">&#167;14</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progressnext"><a href="5-cas.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -82,7 +82,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_CONSTANT_MTID</span><span class="plain-syntax">, </span><a href="5-cnm.html#SP3" class="function-link"><span class="function-syntax">CNamespace::end_constant</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle</span></span>:<br/><a href="5-cnm.html#SP3">&#167;3</a><br/>C Memory Model - <a href="5-cmm.html#SP8_2">&#167;8.2</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle</span></span>:<br/><a href="5-cnm.html#SP3">&#167;3</a><br/>C Memory Model - <a href="5-cmm.html#SP9_2">&#167;9.2</a><br/>C Object Model - <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP10">&#167;10</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'('</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'#'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ss_"</span><span class="plain-syntax">);</span>

View file

@ -89,7 +89,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-car.html#SP1" class="function-link"><span class="function-syntax">CArithmetic::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-cmm.html#SP13" class="function-link"><span class="function-syntax">CMemoryModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-cmm.html#SP14" class="function-link"><span class="function-syntax">CMemoryModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-com.html#SP11" class="function-link"><span class="function-syntax">CObjectModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>

View file

@ -139,7 +139,7 @@ correct.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CReferences::am_I_a_ref</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CReferences::am_I_a_ref</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP13">&#167;13</a><br/>C Object Model - <a href="5-com.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CReferences::am_I_a_ref</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CReferences::am_I_a_ref</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP14">&#167;14</a><br/>C Object Model - <a href="5-com.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">next_node_is_a_ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">next_node_is_a_ref</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax">;</span>
@ -185,7 +185,7 @@ That's what is done by the "A1 as ref" mode set up above.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP13" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP14" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><a href="5-com.html#SP11" class="function-link"><span class="function-syntax">CObjectModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-crf.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Handle the ref using the incomplete-function mode</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>

View file

@ -1,27 +1,27 @@
100.0% in inform7 run
55.1% in compilation to Inter
40.4% in //Sequence::undertake_queued_tasks//
54.4% in compilation to Inter
39.5% in //Sequence::undertake_queued_tasks//
3.4% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
2.6% in //MajorNodes::pass_1//
1.5% in //RTPhrasebook::compile_entries//
1.3% in //ImperativeDefinitions::assess_all//
1.4% in //ImperativeDefinitions::assess_all//
1.1% in //RTKindConstructors::compile//
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //World::stage_V//
0.2% in //CompletionModule::compile//
0.2% in //ImperativeDefinitions::compile_first_block//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
1.7% not specifically accounted for
42.9% in running Inter pipeline
11.6% in step preparation
1.8% not specifically accounted for
43.4% in running Inter pipeline
12.0% in step preparation
9.6% in inter step 7/15: consolidate-text
8.2% in inter step 15/15: generate inform6 -> auto.inf
7.6% in inter step 2/15: link
8.1% in inter step 15/15: generate inform6 -> auto.inf
7.9% in inter step 2/15: link
1.5% in inter step 11/15: make-identifiers-unique
0.4% in inter step 12/15: reconcile-verbs
0.2% in inter step 10/15: detect-indirect-calls
@ -32,6 +32,6 @@
0.1% in inter step 13/15: eliminate-redundant-labels
0.1% in inter step 4/15: parse-linked-matter
0.1% in inter step 5/15: resolve-conditional-compilation
2.0% not specifically accounted for
1.6% in supervisor
0.3% not specifically accounted for
1.8% not specifically accounted for
1.7% in supervisor
0.5% not specifically accounted for

View file

@ -118,6 +118,9 @@ i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val
data[byte_position+3] = I7BYTE_3(new_val);
return return_val;
}
void glulx_aloads(i7val x, i7val y, i7val *z) {
if (z) *z = 0x100*((i7val) i7mem[x+2*y]) + ((i7val) i7mem[x+2*y+1]);
}
void glulx_mcopy(i7val x, i7val y, i7val z) {
if (z < y)
for (i7val i=0; i<x; i++) i7mem[z+i] = i7mem[y+i];
@ -154,14 +157,10 @@ void i7_push(i7val x) {
if (i7_asm_stack_pointer >= I7_ASM_STACK_CAPACITY) { printf("Stack overflow\n"); return; }
i7_asm_stack[i7_asm_stack_pointer++] = x;
}
void glulx_accelfunc(i7val x, i7val y) {
printf("Unimplemented: glulx_accelfunc.\n");
i7_fatal_exit();
void glulx_accelfunc(i7val x, i7val y) { /* Intentionally ignore */
}
void glulx_accelparam(i7val x, i7val y) {
printf("Unimplemented: glulx_accelparam.\n");
i7_fatal_exit();
void glulx_accelparam(i7val x, i7val y) { /* Intentionally ignore */
}
void glulx_copy(i7val x, i7val *y) {
@ -240,11 +239,6 @@ void glulx_aloadb(i7val x, i7val y, i7val *z) {
i7_fatal_exit();
}
void glulx_aloads(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_aloads\n");
i7_fatal_exit();
}
void glulx_binarysearch(i7val l1, i7val l2, i7val l3, i7val l4, i7val l5, i7val l6, i7val l7, i7val *s1) {
printf("Unimplemented: glulx_binarysearch\n");
i7_fatal_exit();
@ -1133,6 +1127,71 @@ void i7_print_decimal(i7val x) {
i7_print_C_string(room);
}
#define evtype_None (0)
#define evtype_Timer (1)
#define evtype_CharInput (2)
#define evtype_LineInput (3)
#define evtype_MouseInput (4)
#define evtype_Arrange (5)
#define evtype_Redraw (6)
#define evtype_SoundNotify (7)
#define evtype_Hyperlink (8)
#define evtype_VolumeNotify (9)
typedef struct i7_glk_event {
i7val type;
i7val win_id;
i7val val1;
i7val val2;
} i7_glk_event;
i7_glk_event i7_events_ring_buffer[32];
int i7_rb_back = 0, i7_rb_front = 0;
i7_glk_event *i7_next_event(void) {
if (i7_rb_front == i7_rb_back) return NULL;
i7_glk_event *e = &(i7_events_ring_buffer[i7_rb_back]);
i7_rb_back++; if (i7_rb_back == 32) i7_rb_back = 0;
return e;
}
void i7_make_event(i7_glk_event e) {
i7_events_ring_buffer[i7_rb_front] = e;
i7_rb_front++; if (i7_rb_front == 32) i7_rb_front = 0;
}
i7val i7_do_glk_select(i7val structure) {
i7_glk_event *e = i7_next_event();
if (e == NULL) {
fprintf(stderr, "No events available to select\n"); i7_fatal_exit();
}
if (structure == -1) {
i7_push(e->type);
i7_push(e->win_id);
i7_push(e->val1);
i7_push(e->val2);
} else {
if (structure) {
i7_write_word(i7mem, structure, 0, e->type, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->win_id, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->val1, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->val2, i7_lvalue_SET);
}
}
}
i7val i7_do_glk_request_line_event(i7val window_id, i7val buffer, i7val max_len, i7val init_len) {
i7_glk_event e;
e.type = evtype_LineInput;
e.win_id = window_id;
e.val1 = 1;
e.val2 = 0;
i7mem[buffer + init_len] = 'q';
i7mem[buffer + init_len+1] = 0;
i7_make_event(e);
return 0;
}
#define i7_glk_exit 0x0001
#define i7_glk_set_interrupt_handler 0x0002
#define i7_glk_tick 0x0003
@ -1286,8 +1345,20 @@ void glulx_glk(i7val glk_api_selector, i7val varargc, i7val *z) {
rv = 0; break;
case i7_glk_schannel_create:
rv = 0; break;
case i7_glk_set_style:
rv = 0; break;
case i7_glk_window_move_cursor:
rv = 0; break;
case i7_glk_stream_get_position:
rv = i7_do_glk_stream_get_position(args[0]); break;
case i7_glk_window_get_size:
if (args[0]) i7_write_word(i7mem, args[0], 0, 80, i7_lvalue_SET);
if (args[1]) i7_write_word(i7mem, args[1], 0, 8, i7_lvalue_SET);
rv = 0; break;
case i7_glk_request_line_event:
rv = i7_do_glk_request_line_event(args[0], args[1], args[2], args[3]); break;
case i7_glk_select:
rv = i7_do_glk_select(args[0]); break;
case i7_glk_stream_close:
i7_do_glk_stream_close(args[0], args[1]); break;
case i7_glk_stream_set_current:

View file

@ -151,14 +151,10 @@ void CAssembly::assembly(code_generation_target *cgt, code_generation *gen,
@
= (text to inform7_clib.h)
void glulx_accelfunc(i7val x, i7val y) {
printf("Unimplemented: glulx_accelfunc.\n");
i7_fatal_exit();
void glulx_accelfunc(i7val x, i7val y) { /* Intentionally ignore */
}
void glulx_accelparam(i7val x, i7val y) {
printf("Unimplemented: glulx_accelparam.\n");
i7_fatal_exit();
void glulx_accelparam(i7val x, i7val y) { /* Intentionally ignore */
}
void glulx_copy(i7val x, i7val *y) {
@ -237,11 +233,6 @@ void glulx_aloadb(i7val x, i7val y, i7val *z) {
i7_fatal_exit();
}
void glulx_aloads(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_aloads\n");
i7_fatal_exit();
}
void glulx_binarysearch(i7val l1, i7val l2, i7val l3, i7val l4, i7val l5, i7val l6, i7val l7, i7val *s1) {
printf("Unimplemented: glulx_binarysearch\n");
i7_fatal_exit();

View file

@ -400,6 +400,71 @@ void i7_print_decimal(i7val x) {
i7_print_C_string(room);
}
#define evtype_None (0)
#define evtype_Timer (1)
#define evtype_CharInput (2)
#define evtype_LineInput (3)
#define evtype_MouseInput (4)
#define evtype_Arrange (5)
#define evtype_Redraw (6)
#define evtype_SoundNotify (7)
#define evtype_Hyperlink (8)
#define evtype_VolumeNotify (9)
typedef struct i7_glk_event {
i7val type;
i7val win_id;
i7val val1;
i7val val2;
} i7_glk_event;
i7_glk_event i7_events_ring_buffer[32];
int i7_rb_back = 0, i7_rb_front = 0;
i7_glk_event *i7_next_event(void) {
if (i7_rb_front == i7_rb_back) return NULL;
i7_glk_event *e = &(i7_events_ring_buffer[i7_rb_back]);
i7_rb_back++; if (i7_rb_back == 32) i7_rb_back = 0;
return e;
}
void i7_make_event(i7_glk_event e) {
i7_events_ring_buffer[i7_rb_front] = e;
i7_rb_front++; if (i7_rb_front == 32) i7_rb_front = 0;
}
i7val i7_do_glk_select(i7val structure) {
i7_glk_event *e = i7_next_event();
if (e == NULL) {
fprintf(stderr, "No events available to select\n"); i7_fatal_exit();
}
if (structure == -1) {
i7_push(e->type);
i7_push(e->win_id);
i7_push(e->val1);
i7_push(e->val2);
} else {
if (structure) {
i7_write_word(i7mem, structure, 0, e->type, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->win_id, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->val1, i7_lvalue_SET);
i7_write_word(i7mem, structure, 0, e->val2, i7_lvalue_SET);
}
}
}
i7val i7_do_glk_request_line_event(i7val window_id, i7val buffer, i7val max_len, i7val init_len) {
i7_glk_event e;
e.type = evtype_LineInput;
e.win_id = window_id;
e.val1 = 1;
e.val2 = 0;
i7mem[buffer + init_len] = 'q';
i7mem[buffer + init_len+1] = 0;
i7_make_event(e);
return 0;
}
#define i7_glk_exit 0x0001
#define i7_glk_set_interrupt_handler 0x0002
#define i7_glk_tick 0x0003
@ -553,8 +618,20 @@ void glulx_glk(i7val glk_api_selector, i7val varargc, i7val *z) {
rv = 0; break;
case i7_glk_schannel_create:
rv = 0; break;
case i7_glk_set_style:
rv = 0; break;
case i7_glk_window_move_cursor:
rv = 0; break;
case i7_glk_stream_get_position:
rv = i7_do_glk_stream_get_position(args[0]); break;
case i7_glk_window_get_size:
if (args[0]) i7_write_word(i7mem, args[0], 0, 80, i7_lvalue_SET);
if (args[1]) i7_write_word(i7mem, args[1], 0, 8, i7_lvalue_SET);
rv = 0; break;
case i7_glk_request_line_event:
rv = i7_do_glk_request_line_event(args[0], args[1], args[2], args[3]); break;
case i7_glk_select:
rv = i7_do_glk_select(args[0]); break;
case i7_glk_stream_close:
i7_do_glk_stream_close(args[0], args[1]); break;
case i7_glk_stream_set_current:

View file

@ -137,6 +137,14 @@ i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val
}
=
@ "Short" 16-bit numbers can also be accessed:
= (text to inform7_clib.h)
void glulx_aloads(i7val x, i7val y, i7val *z) {
if (z) *z = 0x100*((i7val) i7mem[x+2*y]) + ((i7val) i7mem[x+2*y+1]);
}
=
@ A Glulx assembly opcode is provided for fast memory copies:
= (text to inform7_clib.h)