mirror of
https://github.com/ganelson/inform.git
synced 2024-07-01 06:24:58 +03:00
Clarified C memory model and references
This commit is contained in:
parent
77048c82b1
commit
6a92064b5e
|
@ -1,6 +1,6 @@
|
||||||
# Inform 7
|
# Inform 7
|
||||||
|
|
||||||
v10.1.0-alpha.1+6S96 'Krypton' (11 August 2021)
|
v10.1.0-alpha.1+6S97 'Krypton' (12 August 2021)
|
||||||
|
|
||||||
## About Inform 7
|
## About Inform 7
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
Prerelease: alpha.1
|
Prerelease: alpha.1
|
||||||
Build Date: 11 August 2021
|
Build Date: 12 August 2021
|
||||||
Build Number: 6S96
|
Build Number: 6S97
|
||||||
|
|
|
@ -461,6 +461,42 @@ is 20. We instead compile this as
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure text_literal_holder is private to this section.</li></ul>
|
<ul class="endnotetexts"><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>§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_word_array_ref</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_word_array_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">§4.1</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="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">-></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>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">reffed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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">INV_IST</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">METHOD_INV_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">INVOKED_PRIMITIVE</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Inv::invokee</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::to_bip</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">prim</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">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">LOOKUPREF_BIP</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">LOOKUP_BIP</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">reffed</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="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>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_property_ref</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_property_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">§4.1</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="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">-></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>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">reffed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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">INV_IST</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">METHOD_INV_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">INVOKED_PRIMITIVE</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Inv::invokee</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::to_bip</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">prim</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">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PROPERTYVALUE_BIP</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-fc.html">❮</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-cg.html">cg</a></li><li class="progresssection"><a href="2-fc.html">fc</a></li><li class="progresscurrent">cal</li><li class="progresssection"><a href="2-iap.html">iap</a></li><li class="progresssection"><a href="2-vrb.html">vrb</a></li><li class="progresssection"><a href="2-ft.html">ft</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="progresschapter"><a href="5-fnc.html">5</a></li><li class="progressnext"><a href="2-iap.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-fc.html">❮</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-cg.html">cg</a></li><li class="progresssection"><a href="2-fc.html">fc</a></li><li class="progresscurrent">cal</li><li class="progresssection"><a href="2-iap.html">iap</a></li><li class="progresssection"><a href="2-vrb.html">vrb</a></li><li class="progresssection"><a href="2-ft.html">ft</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="progresschapter"><a href="5-fnc.html">5</a></li><li class="progressnext"><a href="2-iap.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -157,7 +157,7 @@ only when assembling other material, and not for the final output.
|
||||||
<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">;</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">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure code_generation is accessed in 2/fc, 2/cal, 2/iap, 2/vrb, 2/ft, 3/fti, 3/fbi, 3/fi, 4/fi6, 5/fnc, 5/cim and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure code_generation is accessed in 2/fc, 2/cal, 2/iap, 2/vrb, 2/ft, 3/fti, 3/fbi, 3/fi, 4/fi6, 5/fnc, 5/crf, 5/cim and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>At present, at least, a "segment" is nothing more than a wrapper for a text.
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>At present, at least, a "segment" is nothing more than a wrapper for a text.
|
||||||
But we abstract it in case it's ever useful for it to be more.
|
But we abstract it in case it's ever useful for it to be more.
|
||||||
</p>
|
</p>
|
||||||
|
@ -174,7 +174,7 @@ But we abstract it in case it's ever useful for it to be more.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">seg</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">seg</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::create_segments</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CodeGen::create_segments</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a><br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">data</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">codes</span><span class="plain-syntax">[]) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::create_segments</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CodeGen::create_segments</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</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">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">data</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">codes</span><span class="plain-syntax">[]) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segment_sequence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segment_sequence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">generated_segment</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">codes</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] >= </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">codes</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] >= </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">codes</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] >= </span><span class="constant-syntax">MAX_CG_SEGMENTS</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">codes</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] >= </span><span class="constant-syntax">MAX_CG_SEGMENTS</span><span class="plain-syntax">) ||</span>
|
||||||
|
@ -201,7 +201,7 @@ always be done in a way which is then undone, restoring the previous state:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP4">§4</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</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">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</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">-></span><span class="element-syntax">current_segment</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">-></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"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> >= </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">i</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> >= </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">-></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>
|
<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">-></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">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="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">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP4">§4</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</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">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</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">-></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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></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">-></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><span class="identifier-syntax">gen</span><span class="plain-syntax">-></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>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -238,7 +238,7 @@ we also have to direct it to a given text.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP4">§4</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP3">§3</a>, <a href="5-cim.html#SP4">§4</a>, <a href="5-cim.html#SP5">§5</a>, <a href="5-cim.html#SP6">§6</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</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">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a>, <a href="5-cmm.html#SP10">§10</a><br/>C Implementation - <a href="5-cim.html#SP2">§2</a>, <a href="5-cim.html#SP3">§3</a>, <a href="5-cim.html#SP4">§4</a>, <a href="5-cim.html#SP5">§5</a>, <a href="5-cim.html#SP6">§6</a>, <a href="5-cim.html#SP7">§7</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a>, <a href="5-com.html#SP10">§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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">temporarily_diverted</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">-></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">-></span><span class="element-syntax">segments</span><span class="plain-syntax">[</span><span class="constant-syntax">temporary_I7CGS</span><span class="plain-syntax">]-></span><span class="element-syntax">generated_code</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">-></span><span class="element-syntax">segments</span><span class="plain-syntax">[</span><span class="constant-syntax">temporary_I7CGS</span><span class="plain-syntax">]-></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">-></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>
|
<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">-></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>
|
||||||
|
|
|
@ -148,7 +148,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::FC::frame</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::FC::frame</span></span>:<br/><a href="2-fc.html#SP2">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3_1">§3.1</a>, <a href="4-fi6.html#SP3_9">§3.9</a>, <a href="4-fi6.html#SP8">§8</a><br/>C Implementation - <a href="5-cim.html#SP2_6">§2.6</a>, <a href="5-cim.html#SP2_14">§2.14</a>, <a href="5-cim.html#SP3">§3</a>, <a href="5-cim.html#SP3_1">§3.1</a>, <a href="5-cim.html#SP3_2">§3.2</a>, <a href="5-cim.html#SP7">§7</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::FC::frame</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::FC::frame</span></span>:<br/><a href="2-fc.html#SP2">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3_1">§3.1</a>, <a href="4-fi6.html#SP3_9">§3.9</a>, <a href="4-fi6.html#SP8">§8</a><br/>C References - <a href="5-crf.html#SP2">§2</a><br/>C Implementation - <a href="5-cim.html#SP2_2">§2.2</a>, <a href="5-cim.html#SP2_10">§2.10</a>, <a href="5-cim.html#SP3">§3</a>, <a href="5-cim.html#SP3_1">§3.1</a>, <a href="5-cim.html#SP3_2">§3.2</a>, <a href="5-cim.html#SP7">§7</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SYMBOL_IST:</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">SYMBOL_IST:</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">CONSTANT_IST:</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">CONSTANT_IST:</span><span class="plain-syntax"> {</span>
|
||||||
|
|
|
@ -82,10 +82,6 @@ function togglePopup(material_id) {
|
||||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdlib.h></span>
|
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdlib.h></span>
|
||||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdio.h></span>
|
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdio.h></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">i7varargs</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">args</span><span class="Extracts-plain-syntax">[10];</span>
|
|
||||||
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7varargs</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_mgl_self</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_self</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_sp</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_sp</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">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_Grammar__Version</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_mgl_Grammar__Version</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">2</span>
|
||||||
|
@ -94,39 +90,6 @@ function togglePopup(material_id) {
|
||||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_tmp</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_tmp</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_seed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">197</span><span class="Extracts-plain-syntax">;</span>
|
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_seed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">197</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_cpv_SET</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_cpv_PREDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_cpv_POSTDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_cpv_PREINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_cpv_POSTINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">I7BYTE_3</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF000000</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">24</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">I7BYTE_2</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x00FF0000</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">16</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">I7BYTE_1</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0000FF00</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">8</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">I7BYTE_0</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x000000FF</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_lookup</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7byte</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</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">offset</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">ind</span><span class="Extracts-plain-syntax">) {</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">offset</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">ind</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">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</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">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+1]) +</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x10000</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">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+2]) + </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x1000000</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">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+3]);</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">write_i7_lookup</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7byte</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</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">offset</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">ind</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">V</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">way</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">val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_lookup</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">offset</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ind</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">RV</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">;</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">way</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_cpv_PREDEC</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">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</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_cpv_POSTDEC</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">val</span><span class="Extracts-plain-syntax">-1; </span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</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_cpv_PREINC</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">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</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_cpv_POSTINC</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">val</span><span class="Extracts-plain-syntax">+1; </span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">offset</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">;</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">I7BYTE_0</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">);</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+1] = </span><span class="Extracts-identifier-syntax">I7BYTE_1</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">);</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+2] = </span><span class="Extracts-identifier-syntax">I7BYTE_2</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">);</span>
|
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7bytes</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">ind</span><span class="Extracts-plain-syntax">+3] = </span><span class="Extracts-identifier-syntax">I7BYTE_3</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</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">RV</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_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">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">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>
|
||||||
|
@ -568,28 +531,25 @@ function togglePopup(material_id) {
|
||||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_sharp_grammar_table</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_sharp_grammar_table</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">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_FLOAT_NAN</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">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_FLOAT_NAN</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</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">i7varargs</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">args</span><span class="Extracts-plain-syntax">[10];</span>
|
||||||
|
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7varargs</span><span class="Extracts-plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_dictionary_words</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">CTarget::begin_dictionary_words</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_memory</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">CTarget::begin_memory</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">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_header_matter_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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7byte i7mem[];\n"</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">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">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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7byte i7mem[] = {\n"</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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_memory</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">CTarget::end_memory</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_dictionary_words</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">CTarget::end_dictionary_words</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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">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="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_predeclarations_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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0, 0 };\n"</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"><</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_dword_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_s_dword_%d %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_p_dword_%d %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">i</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</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><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">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_predeclarations_I7CGS</span><span class="plain-syntax">);</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_predeclarations_I7CGS</span><span class="plain-syntax">);</span>
|
||||||
|
@ -598,20 +558,7 @@ 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="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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_dictionary_words</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_dictionary_words</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_functions</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_functions</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_dictionary_words</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">CTarget::end_dictionary_words</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">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_predeclarations_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">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"><</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_dword_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_s_dword_%d %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_p_dword_%d %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">i</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_functions</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">CTarget::end_functions</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">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_globals_array_I7CGS</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_globals_array_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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#ifdef i7_defined_i7_mgl_I7S_Comp\n"</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">"#ifdef i7_defined_i7_mgl_I7S_Comp\n"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -631,7 +578,7 @@ 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="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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::fix_locals</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">CTarget::fix_locals</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::fix_locals</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">CTarget::fix_locals</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::sweep_for_locals</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">LOCAL_IST</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::sweep_for_locals</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">LOCAL_IST</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
@ -645,7 +592,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::general_segment</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">CTarget::general_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::general_segment</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">CTarget::general_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_IST:</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">CONSTANT_IST:</span><span class="plain-syntax"> {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> =</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> =</span>
|
||||||
|
@ -665,28 +612,28 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::default_segment</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::default_segment</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::default_segment</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">CTarget::default_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::default_segment</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">CTarget::default_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_main_matter_I7CGS</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_main_matter_I7CGS</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::constant_segment</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">CTarget::constant_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::constant_segment</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">CTarget::constant_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_early_matter_I7CGS</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_early_matter_I7CGS</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::basic_constant_segment</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">CTarget::basic_constant_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::basic_constant_segment</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">CTarget::basic_constant_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</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">depth</span><span class="plain-syntax"> >= </span><span class="constant-syntax">10</span><span class="plain-syntax">) </span><span class="identifier-syntax">depth</span><span class="plain-syntax"> = </span><span class="constant-syntax">10</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">depth</span><span class="plain-syntax"> >= </span><span class="constant-syntax">10</span><span class="plain-syntax">) </span><span class="identifier-syntax">depth</span><span class="plain-syntax"> = </span><span class="constant-syntax">10</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_constants_1_I7CGS</span><span class="plain-syntax"> + </span><span class="identifier-syntax">depth</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_constants_1_I7CGS</span><span class="plain-syntax"> + </span><span class="identifier-syntax">depth</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::property_segment</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">CTarget::property_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::property_segment</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">CTarget::property_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_predeclarations_I7CGS</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_predeclarations_I7CGS</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::tl_segment</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CTarget::tl_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::tl_segment</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">CTarget::tl_segment</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_text_literals_code_I7CGS</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">c_text_literals_code_I7CGS</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::offer_pragma</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CTarget::offer_pragma</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::offer_pragma</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">CTarget::offer_pragma</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">) {</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::mangle</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">CTarget::mangle</span></span>:<br/><a href="5-cim.html#SP7">§7</a><br/>Generating C - <a href="5-fnc.html#SP1">§1</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP9">§9</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">CTarget::mangle</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CTarget::mangle</span></span>:<br/><a href="5-cim.html#SP7">§7</a><br/>Generating C - <a href="5-fnc.html#SP1">§1</a><br/>C Memory Model - <a href="5-cmm.html#SP7_2">§7.2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP9">§9</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">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="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_mgl_sharp_"</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_mgl_sharp_"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -696,14 +643,20 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_mgl_%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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_mgl_%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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_primitive</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_primitive</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="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="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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::to_bip</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">prim_name</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::to_bip</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">prim_name</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-crf.html#SP4" class="function-link"><span class="function-syntax">CReferences::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#SP10" 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#SP10" 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>
|
||||||
|
|
||||||
<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">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">INVERSION_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't support this in C</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INVERSION_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't support this in C</span>
|
||||||
|
|
||||||
|
@ -736,34 +689,9 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PUSH_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_push("</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="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">PUSH_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_push("</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="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">PULL_BIP:</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">" = i7_pull()"</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">PULL_BIP:</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">" = i7_pull()"</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">PREINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for store</span><span class="named-paragraph-number">2.2</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">POSTINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for store</span><span class="named-paragraph-number">2.2</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">PREDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for store</span><span class="named-paragraph-number">2.2</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">POSTDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for store</span><span class="named-paragraph-number">2.2</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">STORE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for store</span><span class="named-paragraph-number">2.2</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">SETBIT_BIP:</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_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="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">CLEARBIT_BIP:</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_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><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">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for lookupref</span><span class="named-paragraph-number">2.4</span></a></span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for lookup</span><span class="named-paragraph-number">2.3</span></a></span><span class="plain-syntax">;</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-cim.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for lookupbyte</span><span class="named-paragraph-number">2.5</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">LOOKUPREF_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for lookupref</span><span class="named-paragraph-number">2.4</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">PROPERTYADDRESS_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_prop_addr("</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><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">PROPERTYLENGTH_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_prop_len("</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><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">PROPERTYVALUE_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_change_prop_value("</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>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_read_prop_value("</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>
|
|
||||||
<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">BREAK_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"break"</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">BREAK_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"break"</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">CONTINUE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"continue"</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">CONTINUE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"continue"</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">RETURN_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_6" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for return</span><span class="named-paragraph-number">2.6</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">RETURN_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for return</span><span class="named-paragraph-number">2.2</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">JUMP_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"goto "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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">JUMP_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"goto "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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">QUIT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"exit(0)"</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">QUIT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"exit(0)"</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">RESTORE_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't support this in C</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESTORE_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't support this in C</span>
|
||||||
|
@ -787,13 +715,6 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_5("</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="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_5("</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="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><span class="constant-syntax">INV_A3</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_A4</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><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><span class="constant-syntax">INV_A3</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_A4</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A5</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_A6</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="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A5</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_A6</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="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">MESSAGE0_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_0(i7_read_prop_value("</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><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">MESSAGE1_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_1(i7_read_prop_value("</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>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A3</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="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">MESSAGE2_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_2(i7_read_prop_value("</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>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A3</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_A4</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="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">MESSAGE3_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_3(i7_read_prop_value("</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>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A3</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_A4</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_A5</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="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">CALLMESSAGE0_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ccall_0("</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="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">CALLMESSAGE0_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ccall_0("</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="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">CALLMESSAGE1_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ccall_1("</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLMESSAGE1_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ccall_1("</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="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><span class="reserved-syntax">break</span><span class="plain-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><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
|
@ -814,12 +735,10 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MOVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_move("</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><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">MOVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_move("</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><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">REMOVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_move("</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">", 0)"</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">REMOVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_move("</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">", 0)"</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">GIVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_give("</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">", 1)"</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">TAKE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_give("</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">", 0)"</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">ALTERNATIVECASE_BIP:</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="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">ALTERNATIVECASE_BIP:</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="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">SEQUENTIAL_BIP:</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_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><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">SEQUENTIAL_BIP:</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_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><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">TERNARYSEQUENTIAL_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ternarysequential</span><span class="named-paragraph-number">2.7</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">TERNARYSEQUENTIAL_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ternarysequential</span><span class="named-paragraph-number">2.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">PRINT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%s\", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_PRINTMODE</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="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">PRINT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%s\", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_PRINTMODE</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="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">PRINTRET_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%s\", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_PRINTMODE</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"); return 1"</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">PRINTRET_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%s\", "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_PRINTMODE</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"); return 1"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
|
@ -837,19 +756,19 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTCINDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_cindef_art("</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="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">PRINTCINDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_cindef_art("</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="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">BOX_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_box("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_BOXMODE</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="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">BOX_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_box("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1_BOXMODE</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="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">IF_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_8" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for if</span><span class="named-paragraph-number">2.8</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">IF_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_4" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for if</span><span class="named-paragraph-number">2.4</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">IFDEBUG_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_9" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifdebug</span><span class="named-paragraph-number">2.9</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">IFDEBUG_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_5" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifdebug</span><span class="named-paragraph-number">2.5</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">IFSTRICT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_10" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifstrict</span><span class="named-paragraph-number">2.10</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">IFSTRICT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_6" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifstrict</span><span class="named-paragraph-number">2.6</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">IFELSE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_11" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifelse</span><span class="named-paragraph-number">2.11</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">IFELSE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_7" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for ifelse</span><span class="named-paragraph-number">2.7</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">WHILE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_12" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for while</span><span class="named-paragraph-number">2.12</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">WHILE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_8" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for while</span><span class="named-paragraph-number">2.8</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">DO_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_13" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for do</span><span class="named-paragraph-number">2.13</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">DO_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_9" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for do</span><span class="named-paragraph-number">2.9</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">FOR_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_14" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for for</span><span class="named-paragraph-number">2.14</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">FOR_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_10" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for for</span><span class="named-paragraph-number">2.10</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">OBJECTLOOP_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_15" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for objectloop</span><span class="named-paragraph-number">2.15</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">OBJECTLOOP_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_11" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for objectloop</span><span class="named-paragraph-number">2.11</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">OBJECTLOOPX_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_16" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for objectloopx</span><span class="named-paragraph-number">2.16</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">OBJECTLOOPX_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_12" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for objectloopx</span><span class="named-paragraph-number">2.12</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">LOOP_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_17" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for loop</span><span class="named-paragraph-number">2.17</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">LOOP_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_13" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for loop</span><span class="named-paragraph-number">2.13</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">SWITCH_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_18" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for switch</span><span class="named-paragraph-number">2.18</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">SWITCH_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_14" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for switch</span><span class="named-paragraph-number">2.14</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">CASE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_19" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for case</span><span class="named-paragraph-number">2.19</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">CASE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_15" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for case</span><span class="named-paragraph-number">2.15</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">DEFAULT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_20" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for default</span><span class="named-paragraph-number">2.20</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">DEFAULT_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cim.html#SP2_16" class="named-paragraph-link"><span class="named-paragraph">Generate primitive for default</span><span class="named-paragraph-number">2.16</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">RANDOM_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"fn_i7_mgl_random(1, "</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="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">RANDOM_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"fn_i7_mgl_random(1, "</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="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
@ -867,60 +786,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP3" class="function-link"><span class="function-syntax">CTarget::comparison</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">bip</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="identifier-syntax">InterTree::second_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP3" class="function-link"><span class="function-syntax">CTarget::comparison</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">bip</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="identifier-syntax">InterTree::second_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a> (12 times).</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a> (12 times).</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for store</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for return</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">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">PREINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_cpv_PREINC"</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">POSTINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_cpv_POSTINC"</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">PREDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_cpv_PREDEC"</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">POSTDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_cpv_POSTDEC"</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">STORE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_cpv_SET"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::basically_an_array_write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"("</span><span class="plain-syntax">); </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">) { </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0"</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">", %S))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">store_form</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::basically_a_property_write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"("</span><span class="plain-syntax">); </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">C_write_lookup_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">) { </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0"</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">", %S))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">store_form</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">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">PREINCREMENT_BIP:</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_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="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">POSTINCREMENT_BIP:</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_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="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">PREDECREMENT_BIP:</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_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="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">POSTDECREMENT_BIP:</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_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="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">STORE_BIP:</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_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><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
</pre>
|
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a> (five times).</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>§2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for lookup</span><span class="named-paragraph-number">2.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">"i7_lookup(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-cim.html#SP2">§2</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>§2.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for lookupref</span><span class="named-paragraph-number">2.4</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">"write_i7_lookup(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-cim.html#SP2">§2</a> (twice).</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_5" class="paragraph-anchor"></a><b>§2.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for lookupbyte</span><span class="named-paragraph-number">2.5</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-cim.html#SP2">§2</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_6" class="paragraph-anchor"></a><b>§2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for return</span><span class="named-paragraph-number">2.6</span></span><span class="comment-syntax"> =</span>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -941,7 +807,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_7" class="paragraph-anchor"></a><b>§2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ternarysequential</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>§2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ternarysequential</span><span class="named-paragraph-number">2.3</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -954,7 +820,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_8" class="paragraph-anchor"></a><b>§2.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for if</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_4" class="paragraph-anchor"></a><b>§2.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for if</span><span class="named-paragraph-number">2.4</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -963,7 +829,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_9" class="paragraph-anchor"></a><b>§2.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifdebug</span><span class="named-paragraph-number">2.9</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_5" class="paragraph-anchor"></a><b>§2.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifdebug</span><span class="named-paragraph-number">2.5</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -971,7 +837,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_10" class="paragraph-anchor"></a><b>§2.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifstrict</span><span class="named-paragraph-number">2.10</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_6" class="paragraph-anchor"></a><b>§2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifstrict</span><span class="named-paragraph-number">2.6</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -979,7 +845,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_11" class="paragraph-anchor"></a><b>§2.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifelse</span><span class="named-paragraph-number">2.11</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_7" class="paragraph-anchor"></a><b>§2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for ifelse</span><span class="named-paragraph-number">2.7</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -988,7 +854,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_12" class="paragraph-anchor"></a><b>§2.12. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for while</span><span class="named-paragraph-number">2.12</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_8" class="paragraph-anchor"></a><b>§2.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for while</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -996,14 +862,14 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_13" class="paragraph-anchor"></a><b>§2.13. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for do</span><span class="named-paragraph-number">2.13</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_9" class="paragraph-anchor"></a><b>§2.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for do</span><span class="named-paragraph-number">2.9</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">"do {"</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">"} until (\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">; </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")\n"</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">"do {"</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">"} until (\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">; </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">; </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")\n"</span><span class="plain-syntax">);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_14" class="paragraph-anchor"></a><b>§2.14. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for for</span><span class="named-paragraph-number">2.14</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_10" class="paragraph-anchor"></a><b>§2.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for for</span><span class="named-paragraph-number">2.10</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1020,7 +886,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_15" class="paragraph-anchor"></a><b>§2.15. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for objectloop</span><span class="named-paragraph-number">2.15</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_11" class="paragraph-anchor"></a><b>§2.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for objectloop</span><span class="named-paragraph-number">2.11</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1045,7 +911,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_16" class="paragraph-anchor"></a><b>§2.16. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for objectloopx</span><span class="named-paragraph-number">2.16</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_12" class="paragraph-anchor"></a><b>§2.12. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for objectloopx</span><span class="named-paragraph-number">2.12</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1059,7 +925,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_17" class="paragraph-anchor"></a><b>§2.17. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for loop</span><span class="named-paragraph-number">2.17</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_13" class="paragraph-anchor"></a><b>§2.13. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for loop</span><span class="named-paragraph-number">2.13</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1067,7 +933,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_18" class="paragraph-anchor"></a><b>§2.18. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for switch</span><span class="named-paragraph-number">2.18</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_14" class="paragraph-anchor"></a><b>§2.14. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for switch</span><span class="named-paragraph-number">2.14</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1076,7 +942,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_19" class="paragraph-anchor"></a><b>§2.19. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for case</span><span class="named-paragraph-number">2.19</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_15" class="paragraph-anchor"></a><b>§2.15. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for case</span><span class="named-paragraph-number">2.15</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1085,7 +951,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_terminal_semicolon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-cim.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_20" class="paragraph-anchor"></a><b>§2.20. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for default</span><span class="named-paragraph-number">2.20</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP2_16" class="paragraph-anchor"></a><b>§2.16. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Generate primitive for default</span><span class="named-paragraph-number">2.16</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -1096,7 +962,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::caser</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">CTarget::caser</span></span>:<br/><a href="5-cim.html#SP2_19">§2.19</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::caser</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">CTarget::caser</span></span>:<br/><a href="5-cim.html#SP2_15">§2.15</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">-></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">INV_IST</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">X</span><span class="plain-syntax">-></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">INV_IST</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">X</span><span class="plain-syntax">-></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">METHOD_INV_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">INVOKED_PRIMITIVE</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">X</span><span class="plain-syntax">-></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">METHOD_INV_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">INVOKED_PRIMITIVE</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Inv::invokee</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Inv::invokee</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1114,7 +980,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::comparison</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">CTarget::comparison</span></span>:<br/><a href="5-cim.html#SP2_1">§2.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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::comparison</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">CTarget::comparison</span></span>:<br/><a href="5-cim.html#SP2_1">§2.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="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">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP3" class="function-link"><span class="function-syntax">CTarget::comparison_r</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">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">Y</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP3" class="function-link"><span class="function-syntax">CTarget::comparison_r</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">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">Y</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -1170,7 +1036,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_dictionary_word</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_dictionary_word</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_dictionary_word</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_dictionary_word</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralise</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralise</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="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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_vm_dictionary</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_vm_dictionary</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1187,7 +1053,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b></p>
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_literal_number</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_literal_number</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_literal_number</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_literal_number</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hex_mode</span><span class="plain-syntax">) {</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_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hex_mode</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="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">hex_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0x%x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">hex_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0x%x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1197,7 +1063,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_literal_text</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_literal_text</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::compile_literal_text</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">CTarget::compile_literal_text</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing_mode</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">box_mode</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">printing_mode</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">box_mode</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="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>
|
||||||
|
|
||||||
|
@ -1236,7 +1102,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::prepare_variable</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">CTarget::prepare_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::prepare_variable</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">CTarget::prepare_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</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">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">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">ASSIMILATED_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">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">ASSIMILATED_IANN</span><span class="plain-syntax">) != </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -1251,7 +1117,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::declare_variable</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">CTarget::declare_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::declare_variable</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CTarget::declare_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">of</span><span class="plain-syntax">) {</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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</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">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">ASSIMILATED_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">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">ASSIMILATED_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">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_globals_array_I7CGS</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_globals_array_I7CGS</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1267,26 +1133,26 @@ 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="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="plain-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">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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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#SP7" 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><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-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">-></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">-></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-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">-></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">-></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="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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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#SP8" 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">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="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"> == </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"> < </span><span class="constant-syntax">2</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">2</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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#SP8" 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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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#SP8" 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>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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#SP9" 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>
|
<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">k</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">k</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_constant</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_constant</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">continues</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_constant</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_constant</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">continues</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</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="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">ifndef_me</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">ifndef_me</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">"#ifndef "</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">"#ifndef "</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1297,7 +1163,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</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">continues</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">continues</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_constant</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_constant</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_constant</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_constant</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</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">"\n"</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">ifndef_me</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#endif\n"</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">ifndef_me</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#endif\n"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1330,7 +1196,7 @@ 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="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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_functions</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_functions</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_functions</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_functions</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::add_main</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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::add_main</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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::make_veneer_fcf</span></a><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">"Z__Region"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::make_veneer_fcf</span></a><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">"Z__Region"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::make_veneer_fcf</span></a><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">"CP__Tab"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::make_veneer_fcf</span></a><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">"CP__Tab"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1359,7 +1225,7 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<span class="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_fn_being_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_fn_being_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</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">fn</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</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">fn</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">fn_name</span><span class="plain-syntax"> = </span><a href="2-cal.html#SP2" class="function-link"><span class="function-syntax">CodeGen::CL::name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">fn</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">fn_name</span><span class="plain-syntax"> = </span><a href="2-cal.html#SP2" class="function-link"><span class="function-syntax">CodeGen::CL::name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_fn_parameter_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">C_fn_parameter_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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -1380,7 +1246,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function_code</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function_code</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function_code</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function_code</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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">") {"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_fn_being_found</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_fn_being_found</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -1390,7 +1256,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::place_label</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">CTarget::place_label</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">label_name</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::place_label</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">CTarget::place_label</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">label_name</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="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="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">label_name</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">label_name</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</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) != </span><span class="character-syntax">'.'</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) != </span><span class="character-syntax">'.'</span><span class="plain-syntax">)</span>
|
||||||
|
@ -1398,7 +1264,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": ;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">label_name</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">": ;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">label_name</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_function</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_function</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</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">fn</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_function</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_function</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</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">fn</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">pass</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_fn_prototype</span><span class="plain-syntax">, </span><span class="string-syntax">")"</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">C_fn_prototype</span><span class="plain-syntax">, </span><span class="string-syntax">")"</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
@ -1417,7 +1283,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function_call</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function_call</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_function_call</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_function_call</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">D</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">CONSTANT_IST</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">FORMAT_CONST_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_DIRECT</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">D</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">CONSTANT_IST</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">FORMAT_CONST_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_DIRECT</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">DATA_CONST_IFLD</span><span class="plain-syntax">];</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">DATA_CONST_IFLD</span><span class="plain-syntax">];</span>
|
||||||
|
@ -1440,7 +1306,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::argument</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">CTarget::argument</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">of_argc</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::argument</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">CTarget::argument</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">of_argc</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="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">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</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">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fcf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_final_c_function</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fcf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_final_c_function</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1451,7 +1317,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><a href="2-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="2-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_function_call</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_function_call</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_function_call</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_function_call</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</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">GENERAL_POINTER_IS_NULL</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">translation_data</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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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">")"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1478,7 +1344,7 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_operand_branches</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_operand_branches</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_pointer_on_operand</span><span class="plain-syntax"> = -1;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_pointer_on_operand</span><span class="plain-syntax"> = -1;</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_opcode</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_opcode</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_opcode</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_opcode</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</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="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="identifier-syntax">C_operand_branches</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_branches</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
@ -1511,7 +1377,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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@tan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_pointer_on_operand</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@tan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_pointer_on_operand</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::supply_operand</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">CTarget::supply_operand</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_label</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::supply_operand</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">CTarget::supply_operand</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_label</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="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">is_label</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">is_label</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">C_operand_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</span><span class="plain-syntax">;</span>
|
||||||
|
@ -1530,7 +1396,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_opcode</span><button class="popup" onclick="togglePopup('usagePopup35')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup35">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_opcode</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_opcode</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">CTarget::end_opcode</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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="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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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">")"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_operand_branches</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_operand_branches</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -1541,7 +1407,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::declare_local_variable</span><button class="popup" onclick="togglePopup('usagePopup36')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup36">Usage of <span class="code-font"><span class="function-syntax">CTarget::declare_local_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</span><span class="plain-syntax">,</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::declare_local_variable</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">CTarget::declare_local_variable</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</span><span class="plain-syntax">,</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">) {</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var_name</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">name</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">name</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="2-cal.html#SP2" class="function-link"><span class="function-syntax">CodeGen::CL::name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="2-cal.html#SP2" class="function-link"><span class="function-syntax">CodeGen::CL::name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">));</span>
|
||||||
|
@ -1570,96 +1436,17 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">name</span><span class="plain-syntax">)</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">C_array_entry_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_array_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_array</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_array</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_name</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup35')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup35">Usage of <span class="code-font"><span class="function-syntax">CTarget::new_fake_action</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</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_predeclarations_I7CGS</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_predeclarations_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="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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define "</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">"#define i7_ss_%S %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_action_count</span><span class="plain-syntax">)++);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %d </span><span class="comment-syntax"> An array in format %d\n", C_GEN_DATA(extent_of_i7mem), format);</span>
|
<span class="plain-syntax">}</span>
|
||||||
<span class="string-syntax"> CodeGen::deselect(gen, saved);</span>
|
|
||||||
|
|
||||||
<span class="string-syntax"> if (C_array_name == NULL) C_array_name = Str::new();</span>
|
|
||||||
<span class="string-syntax"> Str::clear(C_array_name); WRITE_TO(C_array_name, "</span><span class="plain-syntax">%</span><span class="identifier-syntax">S</span><span class="string-syntax">", array_name);</span>
|
|
||||||
<span class="string-syntax"> C_array_entry_count = 0;</span>
|
|
||||||
|
|
||||||
<span class="string-syntax"> if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT)) {</span>
|
|
||||||
<span class="string-syntax"> TEMPORARY_TEXT(extname)</span>
|
|
||||||
<span class="string-syntax"> WRITE_TO(extname, "</span><span class="identifier-syntax">xt_</span><span class="plain-syntax">%</span><span class="identifier-syntax">S</span><span class="string-syntax">", array_name);</span>
|
|
||||||
<span class="string-syntax"> CTarget::array_entry(cgt, gen, extname, format);</span>
|
|
||||||
<span class="string-syntax"> DISCARD_TEXT(extname)</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="string-syntax">void CTarget::array_entry(code_generation_target *cgt, code_generation *gen, text_stream *entry, int format) {</span>
|
|
||||||
<span class="string-syntax"> generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);</span>
|
|
||||||
<span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span>
|
|
||||||
<span class="string-syntax"> if ((format == TABLE_ARRAY_FORMAT) || (format == WORD_ARRAY_FORMAT)) {</span>
|
|
||||||
<span class="string-syntax"> WRITE("</span><span class="plain-syntax"> </span><span class="identifier-syntax">I7BYTE_0</span><span class="plain-syntax">(%</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">I7BYTE_1</span><span class="plain-syntax">(%</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">I7BYTE_2</span><span class="plain-syntax">(%</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">I7BYTE_3</span><span class="plain-syntax">(%</span><span class="identifier-syntax">S</span><span class="plain-syntax">),\</span><span class="identifier-syntax">n</span><span class="string-syntax">",</span>
|
|
||||||
<span class="string-syntax"> entry, entry, entry, entry);</span>
|
|
||||||
<span class="string-syntax"> C_GEN_DATA(extent_of_i7mem) += 4;</span>
|
|
||||||
<span class="string-syntax"> } else {</span>
|
|
||||||
<span class="string-syntax"> WRITE("</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i7byte</span><span class="plain-syntax">) %</span><span class="identifier-syntax">S</span><span class="plain-syntax">,\</span><span class="identifier-syntax">n</span><span class="string-syntax">", entry);</span>
|
|
||||||
<span class="string-syntax"> C_GEN_DATA(extent_of_i7mem) += 1;</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> CodeGen::deselect(gen, saved);</span>
|
|
||||||
<span class="string-syntax"> C_array_entry_count++;</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="string-syntax">void CTarget::end_array(code_generation_target *cgt, code_generation *gen, int format) {</span>
|
|
||||||
<span class="string-syntax"> generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);</span>
|
|
||||||
<span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span>
|
|
||||||
<span class="string-syntax"> if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT)) {</span>
|
|
||||||
<span class="string-syntax"> WRITE("</span><span class="plain-syntax">#</span><span class="identifier-syntax">define</span><span class="plain-syntax"> </span><span class="identifier-syntax">xt_</span><span class="plain-syntax">%</span><span class="identifier-syntax">S</span><span class="plain-syntax"> %</span><span class="identifier-syntax">d</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", C_array_name, C_array_entry_count-1);</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> CodeGen::deselect(gen, saved);</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="string-syntax">int CTarget::basically_an_array_write(inter_tree *I, inter_tree_node *P) {</span>
|
|
||||||
<span class="string-syntax"> int reffed = FALSE;</span>
|
|
||||||
<span class="string-syntax"> while (P->W.data[ID_IFLD] == REFERENCE_IST) {</span>
|
|
||||||
<span class="string-syntax"> P = InterTree::first_child(P);</span>
|
|
||||||
<span class="string-syntax"> reffed = TRUE;</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> if (P->W.data[ID_IFLD] == INV_IST) {</span>
|
|
||||||
<span class="string-syntax"> if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {</span>
|
|
||||||
<span class="string-syntax"> inter_symbol *prim = Inter::Inv::invokee(P);</span>
|
|
||||||
<span class="string-syntax"> inter_ti bip = Primitives::to_bip(I, prim);</span>
|
|
||||||
<span class="string-syntax"> if (bip == LOOKUPREF_BIP) return TRUE;</span>
|
|
||||||
<span class="string-syntax"> if ((bip == LOOKUP_BIP) && (reffed)) return TRUE;</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> return FALSE;</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="string-syntax">int CTarget::basically_a_property_write(inter_tree *I, inter_tree_node *P) {</span>
|
|
||||||
<span class="string-syntax"> int reffed = FALSE;</span>
|
|
||||||
<span class="string-syntax"> while (P->W.data[ID_IFLD] == REFERENCE_IST) {</span>
|
|
||||||
<span class="string-syntax"> P = InterTree::first_child(P);</span>
|
|
||||||
<span class="string-syntax"> reffed = TRUE;</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> if (P->W.data[ID_IFLD] == INV_IST) {</span>
|
|
||||||
<span class="string-syntax"> if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {</span>
|
|
||||||
<span class="string-syntax"> inter_symbol *prim = Inter::Inv::invokee(P);</span>
|
|
||||||
<span class="string-syntax"> inter_ti bip = Primitives::to_bip(I, prim);</span>
|
|
||||||
<span class="string-syntax"> if (bip == PROPERTYVALUE_BIP) return TRUE;</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> }</span>
|
|
||||||
<span class="string-syntax"> return FALSE;</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="string-syntax">void CTarget::new_fake_action(code_generation_target *cgt, code_generation *gen, text_stream *name) {</span>
|
|
||||||
<span class="string-syntax"> generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);</span>
|
|
||||||
<span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span>
|
|
||||||
<span class="string-syntax"> WRITE("</span><span class="plain-syntax">#</span><span class="identifier-syntax">define</span><span class="plain-syntax"> </span><span class="identifier-syntax">i7_ss_</span><span class="plain-syntax">%</span><span class="identifier-syntax">S</span><span class="plain-syntax"> %</span><span class="identifier-syntax">d</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", name, C_GEN_DATA(C_action_count)++);</span>
|
|
||||||
<span class="string-syntax"> CodeGen::deselect(gen, saved);</span>
|
|
||||||
<span class="string-syntax">}</span>
|
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The function CTarget::array_entry is used in Generating C (<a href="5-fnc.html#SP1">§1</a>).</li><li>The function CTarget::end_array is used in Generating C (<a href="5-fnc.html#SP1">§1</a>).</li><li>The function CTarget::basically_an_array_write is used in <a href="5-cim.html#SP2_2">§2.2</a>.</li><li>The function CTarget::basically_a_property_write is used in <a href="5-cim.html#SP2_2">§2.2</a>.</li><li>The function CTarget::new_fake_action is used in Generating C (<a href="5-fnc.html#SP1">§1</a>).</li><li>The structure final_c_function is private to this section.</li></ul>
|
<ul class="endnotetexts"><li>The structure final_c_function is private to this section.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="5-fnc.html">❮</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="progresscurrent">cim</li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-com.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="5-cmm.html">❮</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-crf.html">crf</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresscurrent">cim</li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-com.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
409
docs/final-module/5-cmm.html
Normal file
409
docs/final-module/5-cmm.html
Normal file
|
@ -0,0 +1,409 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>C Memory Model</title>
|
||||||
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Language" content="en-gb">
|
||||||
|
|
||||||
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<script>
|
||||||
|
function togglePopup(material_id) {
|
||||||
|
var popup = document.getElementById(material_id);
|
||||||
|
popup.classList.toggle("show");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Extracts-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="commentary-font">
|
||||||
|
<nav role="navigation">
|
||||||
|
<h1><a href="../index.html">
|
||||||
|
<img src="../docs-assets/Inform.png" height=72">
|
||||||
|
</a></h1>
|
||||||
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||||
|
<li><a href="../other.html">other tools</a></li>
|
||||||
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||||
|
<li><a href="../units.html">unit test tools</a></li>
|
||||||
|
</ul><h2>Compiler Webs</h2><ul>
|
||||||
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||||
|
<li><a href="../inform7/index.html">inform7</a></li>
|
||||||
|
<li><a href="../inter/index.html">inter</a></li>
|
||||||
|
</ul><h2>Inbuild Modules</h2><ul>
|
||||||
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||||
|
</ul><h2>Inform7 Modules</h2><ul>
|
||||||
|
<li><a href="../core-module/index.html">core</a></li>
|
||||||
|
<li><a href="../assertions-module/index.html">assertions</a></li>
|
||||||
|
<li><a href="../values-module/index.html">values</a></li>
|
||||||
|
<li><a href="../knowledge-module/index.html">knowledge</a></li>
|
||||||
|
<li><a href="../imperative-module/index.html">imperative</a></li>
|
||||||
|
<li><a href="../runtime-module/index.html">runtime</a></li>
|
||||||
|
<li><a href="../if-module/index.html">if</a></li>
|
||||||
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||||
|
<li><a href="../index-module/index.html">index</a></li>
|
||||||
|
</ul><h2>Inter Modules</h2><ul>
|
||||||
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||||
|
<li><a href="../building-module/index.html">building</a></li>
|
||||||
|
<li><a href="../pipeline-module/index.html">pipeline</a></li>
|
||||||
|
<li><a href="index.html"><span class="selectedlink">final</span></a></li>
|
||||||
|
</ul><h2>Services</h2><ul>
|
||||||
|
<li><a href="../arch-module/index.html">arch</a></li>
|
||||||
|
<li><a href="../calculus-module/index.html">calculus</a></li>
|
||||||
|
<li><a href="../html-module/index.html">html</a></li>
|
||||||
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||||||
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||||
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||||
|
<li><a href="../problems-module/index.html">problems</a></li>
|
||||||
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||||
|
<li><a href="../words-module/index.html">words</a></li>
|
||||||
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<main role="main">
|
||||||
|
<!--Weave of 'C Memory Model' generated by Inweb-->
|
||||||
|
<div class="breadcrumbs">
|
||||||
|
<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">§1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">§2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">§5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP7">§7. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP10">§10. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§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">§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#SP7" 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#SP8" 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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" 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>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">himem</span><span class="plain-syntax">; </span><span class="comment-syntax"> high point of memory: 1 more than the largest legal address</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_name</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">entry_count</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">next_node_is_a_ref</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_memory_model_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::initialise_data</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">CMemoryModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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="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">0</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">array_name</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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">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>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>The structure C_generation_memory_model_data is accessed in 5/crf and here.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Byte-addressable memory. </b>The Inter semantics require that there be an area of byte-accessible memory:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="items"><li>(a) Byte-accessible memory must contain all of the arrays. These can but need
|
||||||
|
not have alignment gaps in between them. (For C, they do not.)
|
||||||
|
</li><li>(b) "Addresses" in this memory identify individual byte positions in it. These
|
||||||
|
can but need not start at 0. (For C, they do.) They must not be too large to
|
||||||
|
fit into an Inter value.
|
||||||
|
</li><li>(c) When an array name is compiled, its runtime value must be its address.
|
||||||
|
</li><li>(d) When an Inter value is stored in byte-accessible memory, it occupies either
|
||||||
|
2 or 4 consecutive bytes, with the little end first. The result is called a
|
||||||
|
"word". (For C, always 4, which is always <span class="extract"><span class="extract-syntax">sizeof(i7val)</span></span>.) Conversion between
|
||||||
|
a word stored in memory and an Inter value must be faithful in both directions.
|
||||||
|
</li><li>(e) Words can be stored at any byte position, and not only at (say) multiples
|
||||||
|
of 2 or 4.
|
||||||
|
</li><li>(f) Arrays in memory are free to contain a mixture of bytes and words: some do.
|
||||||
|
</li><li>(g) Data may be written in byte form and read back in word form, or vice versa.
|
||||||
|
</li></ul>
|
||||||
|
<p class="commentary">We will manage that with a single C array. This is first predeclared here:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-identifier-syntax">i7byte</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7mem</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="SP3" class="paragraph-anchor"></a><b>§3. </b>Declaring that array is our main task in this section.
|
||||||
|
</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::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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">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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7byte i7mem[] = {\n"</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>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>We will end the array with two dummy bytes (which should never be accessed)
|
||||||
|
just in case, and to ensure that it is never empty, which would be illegal
|
||||||
|
in C.
|
||||||
|
</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::end</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">CMemoryModel::end</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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">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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0, 0 };\n"</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>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Reading and writing memory. </b>Given the above array, it's easy to read and write bytes: if <span class="extract"><span class="extract-syntax">a</span></span> is the address
|
||||||
|
then we can simply refer to <span class="extract"><span class="extract-syntax">i7mem[a]</span></span>. Words are more challenging since we
|
||||||
|
need to pack and unpack them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The following function reads a word which is in entry <span class="extract"><span class="extract-syntax">array_index</span></span> (counting
|
||||||
|
0, 1, 2, ...) in the array which begins at the byte address <span class="extract"><span class="extract-syntax">array_address</span></span> in
|
||||||
|
the bank of memory <span class="extract"><span class="extract-syntax">data</span></span>. In practice, we will only every use this function
|
||||||
|
with <span class="extract"><span class="extract-syntax">data</span></span> set to <span class="extract"><span class="extract-syntax">i7mem</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The equivalent for reading a byte entry is <span class="extract"><span class="extract-syntax">data[array_address + array_index]</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_read_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7byte</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</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">array_address</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">array_index</span><span class="Extracts-plain-syntax">) {</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">array_address</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">array_index</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">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax">] +</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">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</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-constant-syntax">0</span><span class="Extracts-identifier-syntax">x10000</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">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">]) +</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x1000000</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">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">3</span><span class="Extracts-plain-syntax">]);</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">Now for writing. Memory locations (like variables and property values) can not
|
||||||
|
only be "set", that is, written to, but also pre-decremented, post-decremented,
|
||||||
|
pre-incremented and post-incremented. This is the equivalent of being able to
|
||||||
|
apply <span class="extract"><span class="Extracts-extract-syntax">++</span></span> or <span class="extract"><span class="Extracts-extract-syntax">--</span></span> either side, in C terms. The following enumerated constants
|
||||||
|
identify which of these five operations to perform:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<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_lvalue_SET</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_PREDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_POSTDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_PREINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_POSTINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_SETBIT</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_CLEARBIT</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">7</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>Packing, unlike unpacking, is done with macros so that it is possible to
|
||||||
|
express a packed word in constant context, which we will need later.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7BYTE_3</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF000000</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">24</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">I7BYTE_2</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x00FF0000</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">16</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">I7BYTE_1</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0000FF00</span><span class="Extracts-plain-syntax">) >> </span><span class="Extracts-constant-syntax">8</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">I7BYTE_0</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">V</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x000000FF</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_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7byte</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</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">array_address</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">array_index</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">new_val</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">way</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">old_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_read_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">array_address</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">array_index</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">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">;</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">way</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_lvalue_PREDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</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_lvalue_POSTDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax">-1; </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</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_lvalue_PREINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</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_lvalue_POSTINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax">+1; </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</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_lvalue_SETBIT</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax"> | </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">new_val</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_lvalue_CLEARBIT</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">old_val</span><span class="Extracts-plain-syntax"> &(~</span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">return_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">new_val</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">array_address</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">array_index</span><span class="Extracts-plain-syntax">;</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">I7BYTE_0</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">);</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax">+1] = </span><span class="Extracts-identifier-syntax">I7BYTE_1</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">);</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax">+2] = </span><span class="Extracts-identifier-syntax">I7BYTE_2</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">);</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">byte_position</span><span class="Extracts-plain-syntax">+3] = </span><span class="Extracts-identifier-syntax">I7BYTE_3</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">new_val</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">return_val</span><span class="Extracts-plain-syntax">;</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="SP7" class="paragraph-anchor"></a><b>§7. 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">
|
||||||
|
<span class="plain-syntax"> | entries count 0, 1, 2,... | entry 0 is N, then entries count 1, 2, ..., N</span>
|
||||||
|
<span class="plain-syntax">-------------+-------------------------------+-----------------------------------------------</span>
|
||||||
|
<span class="plain-syntax">byte entries | BYTE_ARRAY_FORMAT | BUFFER_ARRAY_FORMAT</span>
|
||||||
|
<span class="plain-syntax">-------------+-------------------------------+-----------------------------------------------</span>
|
||||||
|
<span class="plain-syntax">word entries | WORD_ARRAY_FORMAT | TABLE_ARRAY_FORMAT</span>
|
||||||
|
<span class="plain-syntax">-------------+-------------------------------+-----------------------------------------------</span>
|
||||||
|
</pre>
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::begin_array</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">CMemoryModel::begin_array</span></span>:<br/><a href="5-cmm.html#SP1">§1</a><br/>C Implementation - <a href="5-cim.html#SP7">§7</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">array_name</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="identifier-syntax">Str::clear</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">array_name</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">array_name</span><span class="plain-syntax">), </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">array_name</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="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#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Work out the format name</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP7_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">7.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#SP7_3" class="named-paragraph-link"><span class="named-paragraph">Place the extent entry N at index 0</span><span class="named-paragraph-number">7.3</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>§7.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">7.1</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BYTE_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">"byte"</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">WORD_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">"word"</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">BUFFER_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">"buffer"</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">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#SP7">§7</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>§7.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.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">Object, class and function names can also legally appear as array entries,
|
||||||
|
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">7.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">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_predeclarations_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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">array_name</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">" %d /* = position in i7mem of %S array %S */\n"</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="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#SP7">§7</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>§7.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">7.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#SP8" 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#SP7">§7</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </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">§1</a>, <a href="5-cmm.html#SP7_3">§7.3</a><br/>C Implementation - <a href="5-cim.html#SP7">§7</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#SP8_2" class="named-paragraph-link"><span class="named-paragraph">This is a word entry</span><span class="named-paragraph-number">8.2</span></a></span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">This is a byte entry</span><span class="named-paragraph-number">8.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="SP8_1" class="paragraph-anchor"></a><b>§8.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">8.1</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (i7byte) %S,\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</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#SP8">§8</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>§8.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">8.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n"</span><span class="plain-syntax">,</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">entry</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#SP8">§8</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </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>
|
||||||
|
|
||||||
|
<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::end_array</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::end_array</span></span>:<br/><a href="5-cmm.html#SP1">§1</a><br/>C Implementation - <a href="5-cim.html#SP7">§7</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">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">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="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_predeclarations_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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define xt_%S %d\n"</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">array_name</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">)-1);</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="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Primitives for byte and word lookup. </b>The signatures here are:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax">primitive !lookup val val -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !lookupbyte val val -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !lookupref val val -> ref</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary"><span class="extract"><span class="extract-syntax">!lookupref</span></span> is a slightly redundant abbreviation for <span class="extract"><span class="extract-syntax">reference</span></span> with <span class="extract"><span class="extract-syntax">!lookup</span></span>
|
||||||
|
as a child. At present, there is no equivalent <span class="extract"><span class="extract-syntax">!lookupbyteref</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_primitive</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::compile_primitive</span></span>:<br/>C Implementation - <a href="5-cim.html#SP2">§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">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="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">10.3</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</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#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">10.2</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">LOOKUPREF_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">10.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="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</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">"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#SP10">§10</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</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">
|
||||||
|
<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#SP10">§10</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>§10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">10.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">"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#SP10">§10</a> (twice).</li></ul>
|
||||||
|
<nav role="progress"><div class="progresscontainer">
|
||||||
|
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">❮</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-crf.html">crf</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-cim.html">❯</a></li></ul></div>
|
||||||
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -74,7 +74,7 @@ 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 Object Model</b></li></ul></div>
|
<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 Object Model</b></li></ul></div>
|
||||||
<p class="purpose">How objects, classes and properties are compiled to C.</p>
|
<p class="purpose">How objects, classes and properties are compiled to C.</p>
|
||||||
|
|
||||||
<ul class="toc"><li><a href="5-com.html#SP1">§1. Setting up the model</a></li><li><a href="5-com.html#SP1_1">§1.1. Owners</a></li><li><a href="5-com.html#SP1_2">§1.2. Owner IDs</a></li><li><a href="5-com.html#SP2">§2. Class and instance declarations</a></li><li><a href="5-com.html#SP5">§5. Code to compute ofclass and metaclass</a></li><li><a href="5-com.html#SP6">§6. Property IDs</a></li><li><a href="5-com.html#SP8">§8. Property offsets arrays</a></li><li><a href="5-com.html#SP1_5">§1.5. Property-value initialiser function</a></li><li><a href="5-com.html#SP10">§10. Reading and writing properties</a></li><li><a href="5-com.html#SP11">§11. Other things to do with properties</a></li></ul><hr class="tocbar">
|
<ul class="toc"><li><a href="5-com.html#SP1">§1. Setting up the model</a></li><li><a href="5-com.html#SP1_1">§1.1. Owners</a></li><li><a href="5-com.html#SP1_2">§1.2. Owner IDs</a></li><li><a href="5-com.html#SP2">§2. Class and instance declarations</a></li><li><a href="5-com.html#SP5">§5. Code to compute ofclass and metaclass</a></li><li><a href="5-com.html#SP6">§6. Property IDs</a></li><li><a href="5-com.html#SP8">§8. Property offsets arrays</a></li><li><a href="5-com.html#SP1_5">§1.5. Property-value initialiser function</a></li><li><a href="5-com.html#SP10">§10. Primitives for property usage</a></li><li><a href="5-com.html#SP11">§11. Reading and writing properties</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Setting up the model. </b></p>
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Setting up the model. </b></p>
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_class</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">is_class</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">C_property_owner</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">C_property_owner</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::initialise_data</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">CObjectModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP3">§3</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::initialise_data</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">CObjectModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">owner_id_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">owner_id_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">property_id_counter</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">property_id_counter</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">C_property_offsets_made</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">C_property_offsets_made</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
|
@ -112,13 +112,13 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">owners_capacity</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">owners_capacity</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</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="named-paragraph-container code-font"><a href="5-com.html#SP1_5" class="named-paragraph-link"><span class="named-paragraph">Begin the initialiser function</span><span class="named-paragraph-number">1.5</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_5" class="named-paragraph-link"><span class="named-paragraph">Begin the initialiser function</span><span class="named-paragraph-number">1.5</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::declare_property_by_name</span></a><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">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::declare_property_by_name</span></a><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">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::end</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">CObjectModel::end</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::end</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">CObjectModel::end</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§5</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="named-paragraph-container code-font"><a href="5-com.html#SP1_6" class="named-paragraph-link"><span class="named-paragraph">Complete the initialiser function</span><span class="named-paragraph-number">1.6</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_6" class="named-paragraph-link"><span class="named-paragraph">Complete the initialiser function</span><span class="named-paragraph-number">1.6</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_4" class="named-paragraph-link"><span class="named-paragraph">Complete the property-offset creator function</span><span class="named-paragraph-number">1.4</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_4" class="named-paragraph-link"><span class="named-paragraph">Complete the property-offset creator function</span><span class="named-paragraph-number">1.4</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Predeclare the object count and class array</span><span class="named-paragraph-number">1.3</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_3" class="named-paragraph-link"><span class="named-paragraph">Predeclare the object count and class array</span><span class="named-paragraph-number">1.3</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
@ -369,12 +369,12 @@ properties at runtime.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">C_property_offsets_made</span><span class="plain-syntax">)++ == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">C_property_offsets_made</span><span class="plain-syntax">)++ == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Begin the property-offset creator function</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-com.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Begin the property-offset creator function</span><span class="named-paragraph-number">8.1</span></a></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">"write_i7_lookup(i7mem, "</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_write_word(i7mem, "</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">as_attr</span><span class="plain-syntax">) </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"attributed_property_offsets"</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">as_attr</span><span class="plain-syntax">) </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"attributed_property_offsets"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"valued_property_offsets"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"valued_property_offsets"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</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">", %d, i7_cpv_SET);\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</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">", %d, i7_lvalue_SET);\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</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><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="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -389,9 +389,9 @@ not deriving from an Inform program.
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">"i7val fn_i7_mgl_CreatePropertyOffsets(int argc) {\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"i7val fn_i7_mgl_CreatePropertyOffsets(int argc) {\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"for (int i=0; i<i7_mgl_attributed_property_offsets_SIZE; i++)\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"for (int i=0; i<i7_mgl_attributed_property_offsets_SIZE; i++)\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"write_i7_lookup(i7mem, i7_mgl_attributed_property_offsets, i, -1, i7_cpv_SET);\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">OUTDENT</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_write_word(i7mem, i7_mgl_attributed_property_offsets, i, -1, i7_lvalue_SET);\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">OUTDENT</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">"for (int i=0; i<i7_mgl_valued_property_offsets_SIZE; i++)\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"for (int i=0; i<i7_mgl_valued_property_offsets_SIZE; i++)\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"write_i7_lookup(i7mem, i7_mgl_valued_property_offsets, i, -1, i7_cpv_SET);\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">OUTDENT</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_write_word(i7mem, i7_mgl_valued_property_offsets, i, -1, i7_lvalue_SET);\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">OUTDENT</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-com.html#SP8">§8</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-com.html#SP8">§8</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP1_4" class="paragraph-anchor"></a><b>§1.4. </b>This function has no meaningful return value, but has to conform to our
|
<p class="commentary firstcommentary"><a id="SP1_4" class="paragraph-anchor"></a><b>§1.4. </b>This function has no meaningful return value, but has to conform to our
|
||||||
|
@ -468,7 +468,40 @@ the next owner is declared.
|
||||||
<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><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="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Reading and writing properties. </b>So here is the run-time storage for property values, and simple code to read
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Primitives for property usage. </b>The following primitives are all implemented by calling suitable C functions,
|
||||||
|
which we will then need to write in <span class="extract"><span class="extract-syntax">inform7_clib.h</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::compile_primitive</span></span>:<br/>C Implementation - <a href="5-cim.html#SP2">§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">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">PROPERTYADDRESS_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_prop_addr("</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><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">PROPERTYLENGTH_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_prop_len("</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><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">PROPERTYVALUE_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="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_change_prop_value("</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>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_read_prop_value("</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>
|
||||||
|
<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">MESSAGE0_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_0(i7_read_prop_value("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="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><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">MESSAGE1_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_1(i7_read_prop_value("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="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><span class="constant-syntax">INV_A3</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="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">MESSAGE2_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_2(i7_read_prop_value("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="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>
|
||||||
|
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A3</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_A4</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="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">MESSAGE3_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_call_3(i7_read_prop_value("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">); </span><span class="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>
|
||||||
|
<span class="plain-syntax"> </span><span class="constant-syntax">INV_A3</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_A4</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_A5</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="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">GIVE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_give("</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">", 1)"</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">TAKE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_give("</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">", 0)"</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="SP11" class="paragraph-anchor"></a><b>§11. Reading and writing properties. </b>So here is the run-time storage for property values, and simple code to read
|
||||||
and write them. Note that, unlike in the Z-machine or Glulx implementations,
|
and write them. Note that, unlike in the Z-machine or Glulx implementations,
|
||||||
property values are not stored in the memory map.
|
property values are not stored in the memory map.
|
||||||
</p>
|
</p>
|
||||||
|
@ -480,14 +513,6 @@ property values are not stored in the memory map.
|
||||||
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_property_set</span><span class="Extracts-plain-syntax">;</span>
|
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_property_set</span><span class="Extracts-plain-syntax">;</span>
|
||||||
<span class="Extracts-identifier-syntax">i7_property_set</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_max_objects</span><span class="Extracts-plain-syntax">];</span>
|
<span class="Extracts-identifier-syntax">i7_property_set</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_max_objects</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_read_prop_value</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">owner_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">prop_id</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">owner_id</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">owner_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_max_objects</span><span class="Extracts-plain-syntax">) ||</span>
|
|
||||||
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">prop_id</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">prop_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_no_property_ids</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-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value_set</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</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">owner_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_class_of</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">owner_id</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">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</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_write_prop_value</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">owner_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">prop_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">val</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_write_prop_value</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">owner_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">prop_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">val</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">owner_id</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">owner_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_max_objects</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">owner_id</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">owner_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_max_objects</span><span class="Extracts-plain-syntax">) ||</span>
|
||||||
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">prop_id</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">prop_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_no_property_ids</span><span class="Extracts-plain-syntax">)) {</span>
|
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">prop_id</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">prop_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_no_property_ids</span><span class="Extracts-plain-syntax">)) {</span>
|
||||||
|
@ -499,17 +524,28 @@ property values are not stored in the memory map.
|
||||||
<span class="Extracts-plain-syntax">}</span>
|
<span class="Extracts-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Other things to do with properties. </b></p>
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>And here sre the functions called by the above primitives:
|
||||||
|
</p>
|
||||||
|
|
||||||
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_read_prop_value</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">owner_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">prop_id</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">owner_id</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">owner_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_max_objects</span><span class="Extracts-plain-syntax">) ||</span>
|
||||||
|
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">prop_id</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">prop_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_no_property_ids</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-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value_set</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</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">owner_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_class_of</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">owner_id</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">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_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">i7_change_prop_value</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">obj</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">pr</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">to</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">way</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_change_prop_value</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">obj</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">pr</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">to</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">way</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">val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_read_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">), </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</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">val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_read_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">), </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">;</span>
|
||||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">way</span><span class="Extracts-plain-syntax">) {</span>
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">way</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_cpv_SET</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</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">new_val</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">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_lvalue_SET</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</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">new_val</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">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_cpv_PREDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">val</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_lvalue_PREDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">val</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_cpv_POSTDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">-1; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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_lvalue_POSTDEC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">-1; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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_cpv_PREINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">val</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_lvalue_PREINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">val</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_cpv_POSTINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">+1; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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_lvalue_POSTINC</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">+1; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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_lvalue_SETBIT</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax"> | </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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_lvalue_CLEARBIT</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax"> &(~</span><span class="Extracts-identifier-syntax">new_val</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_write_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">new_val</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-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">new_val</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">new_val</span><span class="Extracts-plain-syntax">;</span>
|
||||||
<span class="Extracts-plain-syntax">}</span>
|
<span class="Extracts-plain-syntax">}</span>
|
||||||
|
@ -530,7 +566,7 @@ property values are not stored in the memory map.
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="5-cim.html">❮</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-cim.html">cim</a></li><li class="progresscurrent">com</li><li class="progressnextoff">❯</li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="5-cim.html">❮</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-crf.html">crf</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresscurrent">com</li><li class="progressnextoff">❯</li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
227
docs/final-module/5-crf.html
Normal file
227
docs/final-module/5-crf.html
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>C References</title>
|
||||||
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Language" content="en-gb">
|
||||||
|
|
||||||
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<script>
|
||||||
|
function togglePopup(material_id) {
|
||||||
|
var popup = document.getElementById(material_id);
|
||||||
|
popup.classList.toggle("show");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<script src="http://code.jquery.com/jquery-1.12.4.min.js"
|
||||||
|
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
|
<script src="../docs-assets/Bigfoot.js"></script>
|
||||||
|
<link href="../docs-assets/Bigfoot.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Extracts-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="commentary-font">
|
||||||
|
<nav role="navigation">
|
||||||
|
<h1><a href="../index.html">
|
||||||
|
<img src="../docs-assets/Inform.png" height=72">
|
||||||
|
</a></h1>
|
||||||
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||||
|
<li><a href="../other.html">other tools</a></li>
|
||||||
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||||
|
<li><a href="../units.html">unit test tools</a></li>
|
||||||
|
</ul><h2>Compiler Webs</h2><ul>
|
||||||
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||||
|
<li><a href="../inform7/index.html">inform7</a></li>
|
||||||
|
<li><a href="../inter/index.html">inter</a></li>
|
||||||
|
</ul><h2>Inbuild Modules</h2><ul>
|
||||||
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||||
|
</ul><h2>Inform7 Modules</h2><ul>
|
||||||
|
<li><a href="../core-module/index.html">core</a></li>
|
||||||
|
<li><a href="../assertions-module/index.html">assertions</a></li>
|
||||||
|
<li><a href="../values-module/index.html">values</a></li>
|
||||||
|
<li><a href="../knowledge-module/index.html">knowledge</a></li>
|
||||||
|
<li><a href="../imperative-module/index.html">imperative</a></li>
|
||||||
|
<li><a href="../runtime-module/index.html">runtime</a></li>
|
||||||
|
<li><a href="../if-module/index.html">if</a></li>
|
||||||
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||||
|
<li><a href="../index-module/index.html">index</a></li>
|
||||||
|
</ul><h2>Inter Modules</h2><ul>
|
||||||
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||||
|
<li><a href="../building-module/index.html">building</a></li>
|
||||||
|
<li><a href="../pipeline-module/index.html">pipeline</a></li>
|
||||||
|
<li><a href="index.html"><span class="selectedlink">final</span></a></li>
|
||||||
|
</ul><h2>Services</h2><ul>
|
||||||
|
<li><a href="../arch-module/index.html">arch</a></li>
|
||||||
|
<li><a href="../calculus-module/index.html">calculus</a></li>
|
||||||
|
<li><a href="../html-module/index.html">html</a></li>
|
||||||
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||||||
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||||
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||||
|
<li><a href="../problems-module/index.html">problems</a></li>
|
||||||
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||||
|
<li><a href="../words-module/index.html">words</a></li>
|
||||||
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<main role="main">
|
||||||
|
<!--Weave of 'C References' generated by Inweb-->
|
||||||
|
<div class="breadcrumbs">
|
||||||
|
<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 References</b></li></ul></div>
|
||||||
|
<p class="purpose">How changes to storage objects are translated into C.</p>
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>References identify storage objects which are being written to or otherwise
|
||||||
|
modified, rather than having their current contents read.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">There are seven possible ways to modify something identified by a reference,
|
||||||
|
and we need constants to identify these ways at runtime:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<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_lvalue_SET</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_PREDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_POSTDEC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_PREINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_POSTINC</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_SETBIT</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-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">i7_lvalue_CLEARBIT</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">7</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Those seven ways correspond to seven Inter primitives, with the following
|
||||||
|
signatures:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax">primitive !store ref val -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !preincrement ref -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !postincrement ref -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !predecrement ref -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !postdecrement ref -> val</span>
|
||||||
|
<span class="plain-syntax">primitive !setbit ref val -> void</span>
|
||||||
|
<span class="plain-syntax">primitive !clearbit ref val -> void</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary">Since C functions can have their return values freely ignored, we will in fact
|
||||||
|
implement <span class="extract"><span class="extract-syntax">!setbit</span></span> and <span class="extract"><span class="extract-syntax">!clearbit</span></span> as if they too had the signature
|
||||||
|
<span class="extract"><span class="extract-syntax">ref val -> val</span></span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">For all these primitives, then, the first operand A1 is a <span class="extract"><span class="extract-syntax">ref</span></span>, and the following
|
||||||
|
function should be used to generate from it:
|
||||||
|
</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">CReferences::A1_as_ref</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">CReferences::A1_as_ref</span></span>:<br/><a href="5-crf.html#SP4_1_1">§4.1.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_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">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">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="2-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</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="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>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>That sets a temporary mode which is immediately detected and cleared by
|
||||||
|
the generator for whatever A1 actually is. That generator is expected to call
|
||||||
|
this function to detect whether it's a ref. In this mode, A1 is compiled not
|
||||||
|
to a valid C expression to evaluate the contents of A1, but instead to a
|
||||||
|
function call which will modify A1, and which is missing one or two final
|
||||||
|
arguments.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">Note that the mode is auto-exited at once. This is all a bit clumsy, but is
|
||||||
|
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#SP10">§10</a><br/>C Object Model - <a href="5-com.html#SP10">§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="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>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>So, then, here goes:
|
||||||
|
</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::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CReferences::compile_primitive</span></span>:<br/>C Implementation - <a href="5-cim.html#SP2">§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">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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">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">STORE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_SET"</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">PREINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_PREINC"</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">POSTINCREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_POSTINC"</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">PREDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_PREDEC"</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">POSTDECREMENT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_POSTDEC"</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">SETBIT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_SETBIT"</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">CLEARBIT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_lvalue_CLEARBIT"</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">store_form</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-crf.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">This does indeed modify a value by reference</span><span class="named-paragraph-number">4.1</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">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>§4.1. </b>Some storage objects, like variables, can be generated to C code which works
|
||||||
|
in either an lvalue or rvalue context. For example, the Inter variable <span class="extract"><span class="extract-syntax">frog</span></span>
|
||||||
|
generates just as the C variable <span class="extract"><span class="extract-syntax">i7_mgl_frog</span></span>.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> It's then fine to generate
|
||||||
|
code like either <span class="extract"><span class="extract-syntax">10 + i7_mgl_frog</span></span>, where it is used in a <span class="extract"><span class="extract-syntax">val</span></span> context, or
|
||||||
|
like <span class="extract"><span class="extract-syntax">i7_mgl_frog++</span></span>, where it is used in a <span class="extract"><span class="extract-syntax">ref</span></span> context.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">But other storage objects are not so lucky, and those need to generate to
|
||||||
|
different function calls, one used in a <span class="extract"><span class="extract-syntax">ref</span></span> setting, one used in a <span class="extract"><span class="extract-syntax">val</span></span>.
|
||||||
|
That's what is done by the "A1 as ref" mode set up above.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> In real life, do not mangle frogs. See C. S. Lewis, "Perelandra", 1943.
|
||||||
|
<a href="#fnref:1" title="return to text"> ↩</a></p></li></ul>
|
||||||
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">This does indeed modify a value by reference</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_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="2-cal.html#SP3" class="function-link"><span class="function-syntax">CodeGen::CL::node_is_word_array_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
|
||||||
|
<span class="plain-syntax"> (</span><a href="2-cal.html#SP3" class="function-link"><span class="function-syntax">CodeGen::CL::node_is_property_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</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>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-crf.html#SP4_1_2" class="named-paragraph-link"><span class="named-paragraph">Handle the ref with C code working either as lvalue or rvalue</span><span class="named-paragraph-number">4.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-crf.html#SP4">§4</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4_1_1" class="paragraph-anchor"></a><b>§4.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle the ref using the incomplete-function mode</span><span class="named-paragraph-number">4.1.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">"("</span><span class="plain-syntax">); </span><a href="5-crf.html#SP2" class="function-link"><span class="function-syntax">CReferences::A1_as_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</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">bip</span><span class="plain-syntax"> == </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">) { </span><span class="constant-syntax">INV_A2</span><span class="plain-syntax">; } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"0"</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">", %S))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">store_form</span><span class="plain-syntax">);</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-crf.html#SP4_1">§4.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4_1_2" class="paragraph-anchor"></a><b>§4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle the ref with C code working either as lvalue or rvalue</span><span class="named-paragraph-number">4.1.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="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">PREINCREMENT_BIP:</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_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="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">POSTINCREMENT_BIP:</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_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="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">PREDECREMENT_BIP:</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_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="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">POSTDECREMENT_BIP:</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_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="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">STORE_BIP:</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_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><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">SETBIT_BIP:</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_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="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">CLEARBIT_BIP:</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_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><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-crf.html#SP4_1">§4.1</a>.</li></ul>
|
||||||
|
<nav role="progress"><div class="progresscontainer">
|
||||||
|
<ul class="progressbar"><li class="progressprev"><a href="5-fnc.html">❮</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="progresscurrent">crf</li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-cmm.html">❯</a></li></ul></div>
|
||||||
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -21,6 +21,7 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Extracts-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body class="commentary-font">
|
<body class="commentary-font">
|
||||||
|
@ -73,19 +74,19 @@ 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>Generating C</b></li></ul></div>
|
<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>Generating C</b></li></ul></div>
|
||||||
<p class="purpose">To generate I6 code from intermediate code.</p>
|
<p class="purpose">To generate I6 code from intermediate code.</p>
|
||||||
|
|
||||||
<ul class="toc"><li><a href="5-fnc.html#SP1">§1. </a></li><li><a href="5-fnc.html#SP2">§2. Segmentation</a></li><li><a href="5-fnc.html#SP3">§3. State data</a></li><li><a href="5-fnc.html#SP4">§4. Begin and end</a></li></ul><hr class="tocbar">
|
<ul class="toc"><li><a href="5-fnc.html#SP1">§1. Target</a></li><li><a href="5-fnc.html#SP2">§2. Static supporting code</a></li><li><a href="5-fnc.html#SP3">§3. Segmentation</a></li><li><a href="5-fnc.html#SP4">§4. State data</a></li><li><a href="5-fnc.html#SP5">§5. Begin and end</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Target,
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Target. </b></p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">c_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">c_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::create_target</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">CTarget::create_target</span></span>:<br/>Final Targets - <a href="2-ft.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::create_target</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">CTarget::create_target</span></span>:<br/>Final Targets - <a href="2-ft.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c_target</span><span class="plain-syntax"> = </span><a href="2-ft.html#SP1" class="function-link"><span class="function-syntax">CodeGen::Targets::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"c"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">c_target</span><span class="plain-syntax"> = </span><a href="2-ft.html#SP1" class="function-link"><span class="function-syntax">CodeGen::Targets::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"c"</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="5-fnc.html#SP4" class="function-link"><span class="function-syntax">CTarget::begin_generation</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="5-fnc.html#SP5" class="function-link"><span class="function-syntax">CTarget::begin_generation</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="5-fnc.html#SP4" class="function-link"><span class="function-syntax">CTarget::end_generation</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="5-fnc.html#SP5" class="function-link"><span class="function-syntax">CTarget::end_generation</span></a><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><a href="5-cmm.html#SP1" class="function-link"><span class="function-syntax">CMemoryModel::initialise</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c_target</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c_target</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c_target</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">GENERAL_SEGMENT_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::general_segment</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">GENERAL_SEGMENT_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::general_segment</span></a><span class="plain-syntax">);</span>
|
||||||
|
@ -114,110 +115,129 @@ 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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::begin_opcode</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::begin_opcode</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">SUPPLY_OPERAND_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::supply_operand</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">SUPPLY_OPERAND_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::supply_operand</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::end_opcode</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::end_opcode</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::offer_pragma</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::offer_pragma</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::new_fake_action</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">c_target</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="5-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::new_fake_action</span></a><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Segmentation. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. Static supporting code. </b>The C code generated here would not compile as a stand-alone file. It needs
|
||||||
|
to use variables and functions from a small unchanging library called
|
||||||
|
<span class="extract"><span class="extract-syntax">inform7_clib.h</span></span>. (The <span class="extract"><span class="extract-syntax">.h</span></span> there is questionable, since this is not purely
|
||||||
|
a header file: it contains actual content and not only predeclarations. On
|
||||||
|
the other hand, it serves the same basic purpose.)
|
||||||
|
</p>
|
||||||
|
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">c_fundamental_types_I7CGS</span>
|
<p class="commentary">The code we generate here can only make sense if read alongside <span class="extract"><span class="extract-syntax">inform7_clib.h</span></span>,
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_ids_and_maxima_I7CGS</span>
|
and vice versa, so the file is presented here in installments. This is the
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_header_matter_I7CGS</span>
|
first of those:
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_predeclarations_I7CGS</span>
|
</p>
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_very_early_matter_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_1_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_2_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_3_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_4_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_5_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_6_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_7_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_8_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_9_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_constants_10_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_early_matter_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_text_literals_code_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_summations_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_arrays_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_globals_array_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_main_matter_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_functions_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_code_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_verbs_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_stubs_at_eof_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_property_offset_creator_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_mem_I7CGS</span>
|
|
||||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">c_initialiser_I7CGS</span>
|
|
||||||
</pre>
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C_target_segments</span><span class="plain-syntax">[] = {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_fundamental_types_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_ids_and_maxima_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_header_matter_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_predeclarations_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_very_early_matter_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_1_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_2_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_3_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_4_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_5_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_6_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_7_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_8_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_9_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_constants_10_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_early_matter_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_text_literals_code_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_summations_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_arrays_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_globals_array_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_main_matter_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_functions_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_code_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_verbs_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_stubs_at_eof_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="constant-syntax">c_property_offset_creator_I7CGS</span><span class="plain-syntax">,</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="constant-syntax">c_initialiser_I7CGS</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> -1</span>
|
|
||||||
<span class="plain-syntax">};</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. State data. </b></p>
|
|
||||||
|
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">x</span><span class="plain-syntax">) ((</span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax"> *) (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target_specific_data</span><span class="plain-syntax">))-></span><span class="identifier-syntax">x</span>
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-plain-syntax">/* </span><span class="Extracts-identifier-syntax">This</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">a</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">library</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">C</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">code</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">support</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">Inform</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">or</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">other</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">Inter</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">programs</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">compiled</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">tp</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ANSI</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">C</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">It</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">was</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">generated</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mechanically</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">from</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">Inter</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">source</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">code</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">so</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">change</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">it</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">edit</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">that</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">and</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">this</span><span class="Extracts-plain-syntax">. */</span>
|
||||||
|
|
||||||
|
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdlib.h></span>
|
||||||
|
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdio.h></span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Segmentation. </b></p>
|
||||||
|
|
||||||
|
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_fundamental_types_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_ids_and_maxima_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_header_matter_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_predeclarations_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_very_early_matter_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_1_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_2_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_3_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_4_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_5_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_6_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_7_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_8_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_9_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_constants_10_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_early_matter_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_text_literals_code_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_summations_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_arrays_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_globals_array_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_main_matter_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_functions_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_code_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_verbs_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_stubs_at_eof_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_property_offset_creator_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_mem_I7CGS</span>
|
||||||
|
<span class="definition-keyword">enum</span> <span class="Extracts-constant-syntax">c_initialiser_I7CGS</span>
|
||||||
|
</pre>
|
||||||
|
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Extracts-reserved-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">C_target_segments</span><span class="Extracts-plain-syntax">[] = {</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_fundamental_types_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_ids_and_maxima_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_header_matter_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_predeclarations_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_very_early_matter_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_1_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_2_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_3_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_4_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_5_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_6_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_7_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_8_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_9_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_constants_10_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_early_matter_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_text_literals_code_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_summations_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_arrays_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_globals_array_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_main_matter_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_functions_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_code_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_verbs_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_stubs_at_eof_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_property_offset_creator_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_mem_I7CGS</span><span class="Extracts-plain-syntax">,</span>
|
||||||
|
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">c_initialiser_I7CGS</span><span class="Extracts-plain-syntax">,</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="SP4" class="paragraph-anchor"></a><b>§4. State data. </b></p>
|
||||||
|
|
||||||
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Extracts-identifier-syntax">C_GEN_DATA</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) ((</span><span class="Extracts-reserved-syntax">C_generation_data</span><span class="Extracts-plain-syntax"> *) (</span><span class="Extracts-identifier-syntax">gen</span><span class="Extracts-plain-syntax">-></span><span class="Extracts-element-syntax">target_specific_data</span><span class="Extracts-plain-syntax">))-></span><span class="Extracts-identifier-syntax">x</span>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_data</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_data</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">double_quoted_C</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">double_quoted_C</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">no_double_quoted_C_strings</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">no_double_quoted_C_strings</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">extent_of_i7mem</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">C_dword_count</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">C_dword_count</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">C_action_count</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">C_action_count</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_vm_dictionary</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_vm_dictionary</span><span class="plain-syntax">;</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><span class="identifier-syntax">memdata</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_object_model_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">objdata</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_object_model_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">objdata</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::initialise_data</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">CTarget::initialise_data</span></span>:<br/><a href="5-fnc.html#SP4">§4</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::initialise_data</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">CTarget::initialise_data</span></span>:<br/><a href="5-fnc.html#SP5">§5</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><a href="5-cmm.html#SP1" class="function-link"><span class="function-syntax">CMemoryModel::initialise_data</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">double_quoted_C</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">double_quoted_C</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">no_double_quoted_C_strings</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">no_double_quoted_C_strings</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">extent_of_i7mem</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_dword_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_dword_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_action_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_action_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_vm_dictionary</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(1024, </span><span class="identifier-syntax">TRUE</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">C_vm_dictionary</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(1024, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure C_generation_data is private to this section.</li></ul>
|
<ul class="endnotetexts"><li>The structure C_generation_data is private to this section.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Begin and end. </b></p>
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Begin and end. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_generation</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_generation</span></span>:<br/><a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::begin_generation</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CTarget::begin_generation</span></span>:<br/><a href="5-fnc.html#SP1">§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><a href="2-cg.html#SP3" class="function-link"><span class="function-syntax">CodeGen::create_segments</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">C_target_segments</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="2-cg.html#SP3" class="function-link"><span class="function-syntax">CodeGen::create_segments</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">C_target_segments</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-fnc.html#SP3" class="function-link"><span class="function-syntax">CTarget::initialise_data</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-fnc.html#SP4" class="function-link"><span class="function-syntax">CTarget::initialise_data</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::fix_locals</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::fix_locals</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
@ -232,7 +252,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#include \"inform7_clib.h\"\n"</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">"#include \"inform7_clib.h\"\n"</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><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><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::begin_memory</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#SP3" class="function-link"><span class="function-syntax">CMemoryModel::begin</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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::begin_functions</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-cim.html#SP7" class="function-link"><span class="function-syntax">CTarget::begin_functions</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::begin</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::begin</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::begin_dictionary_words</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::begin_dictionary_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
|
||||||
|
@ -241,7 +261,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_generation</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">CTarget::end_generation</span></span>:<br/><a href="5-fnc.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::end_generation</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">CTarget::end_generation</span></span>:<br/><a href="5-fnc.html#SP1">§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><a href="5-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::end_memory</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#SP4" class="function-link"><span class="function-syntax">CMemoryModel::end</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::end_functions</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::end_functions</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::end</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-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::end</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::end_dictionary_words</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-cim.html#SP2" class="function-link"><span class="function-syntax">CTarget::end_dictionary_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
|
||||||
|
@ -250,7 +270,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-fi6.html">❮</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="progresscurrent">fnc</li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-cim.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-fi6.html">❮</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="progresscurrent">fnc</li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progressnext"><a href="5-crf.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -151,6 +151,16 @@
|
||||||
<spon class="sectiontitle">Generating C</span></a> -
|
<spon class="sectiontitle">Generating C</span></a> -
|
||||||
<span class="sectionpurpose">To generate I6 code from intermediate code.</span></p>
|
<span class="sectionpurpose">To generate I6 code from intermediate code.</span></p>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="sectionentry"><a href="5-crf.html">
|
||||||
|
<spon class="sectiontitle">C References</span></a> -
|
||||||
|
<span class="sectionpurpose">How changes to storage objects are translated into C.</span></p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="sectionentry"><a href="5-cmm.html">
|
||||||
|
<spon class="sectiontitle">C Memory Model</span></a> -
|
||||||
|
<span class="sectionpurpose">How arrays of all kinds are stored in C.</span></p>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p class="sectionentry"><a href="5-cim.html">
|
<p class="sectionentry"><a href="5-cim.html">
|
||||||
<spon class="sectiontitle">C Implementation</span></a> -
|
<spon class="sectiontitle">C Implementation</span></a> -
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
Total memory consumption was 399081K = 390 MB
|
Total memory consumption was 399082K = 390 MB
|
||||||
|
|
||||||
60.3% was used for 1995521 objects, in 371145 frames in 301 x 800K = 240800K = 235 MB:
|
60.3% was used for 1995621 objects, in 371146 frames in 301 x 800K = 240800K = 235 MB:
|
||||||
|
|
||||||
10.2% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
10.2% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||||
7.0% text_stream_array 5128 x 100 = 512800 objects, 28880896 bytes
|
7.0% text_stream_array 5129 x 100 = 512900 objects, 28886528 bytes
|
||||||
4.2% linked_list 30848 objects, 17274880 bytes
|
4.2% linked_list 30848 objects, 17274880 bytes
|
||||||
3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes
|
3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes
|
||||||
2.5% parse_node 129399 objects, 10351920 bytes
|
2.5% parse_node 129399 objects, 10351920 bytes
|
||||||
|
@ -238,7 +238,7 @@ Total memory consumption was 399081K = 390 MB
|
||||||
|
|
||||||
39.6% was used for memory not allocated for objects:
|
39.6% was used for memory not allocated for objects:
|
||||||
|
|
||||||
21.1% text stream storage 86232716 bytes in 530547 claims
|
21.1% text stream storage 86234244 bytes in 530559 claims
|
||||||
4.4% dictionary storage 18153984 bytes in 33230 claims
|
4.4% dictionary storage 18153984 bytes in 33230 claims
|
||||||
---- sorting 744 bytes in 3 claims
|
---- sorting 744 bytes in 3 claims
|
||||||
1.7% source text 7200000 bytes in 3 claims
|
1.7% source text 7200000 bytes in 3 claims
|
||||||
|
@ -256,5 +256,5 @@ Total memory consumption was 399081K = 390 MB
|
||||||
---- code generation workspace for objects 9648 bytes in 9 claims
|
---- code generation workspace for objects 9648 bytes in 9 claims
|
||||||
---- emitter array storage 161920 bytes in 2064 claims
|
---- emitter array storage 161920 bytes in 2064 claims
|
||||||
|
|
||||||
18.7% was overhead - 76757816 bytes = 74958K = 73 MB
|
18.7% was overhead - 76752184 bytes = 74953K = 73 MB
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
100.0% in inform7 run
|
100.0% in inform7 run
|
||||||
55.1% in compilation to Inter
|
55.3% in compilation to Inter
|
||||||
40.1% in //Sequence::undertake_queued_tasks//
|
40.2% in //Sequence::undertake_queued_tasks//
|
||||||
3.5% in //MajorNodes::pre_pass//
|
3.5% in //MajorNodes::pre_pass//
|
||||||
2.5% in //MajorNodes::pass_1//
|
2.5% in //MajorNodes::pass_1//
|
||||||
1.5% in //RTPhrasebook::compile_entries//
|
1.5% in //RTPhrasebook::compile_entries//
|
||||||
|
@ -16,11 +16,11 @@
|
||||||
0.1% in //RTKindConstructors::compile_permissions//
|
0.1% in //RTKindConstructors::compile_permissions//
|
||||||
0.1% in //Task::make_built_in_kind_constructors//
|
0.1% in //Task::make_built_in_kind_constructors//
|
||||||
0.1% in //World::stages_II_and_III//
|
0.1% in //World::stages_II_and_III//
|
||||||
1.8% not specifically accounted for
|
1.9% not specifically accounted for
|
||||||
42.8% in running Inter pipeline
|
42.6% in running Inter pipeline
|
||||||
10.7% in step preparation
|
10.9% in step preparation
|
||||||
9.7% in inter step 7/14: consolidate-text
|
9.8% in inter step 7/14: consolidate-text
|
||||||
8.3% in inter step 14/14: generate inform6 -> auto.inf
|
8.2% in inter step 14/14: generate inform6 -> auto.inf
|
||||||
7.9% in inter step 2/14: link
|
7.9% in inter step 2/14: link
|
||||||
1.5% in inter step 10/14: make-identifiers-unique
|
1.5% in inter step 10/14: make-identifiers-unique
|
||||||
0.4% in inter step 11/14: reconcile-verbs
|
0.4% in inter step 11/14: reconcile-verbs
|
||||||
|
@ -31,6 +31,6 @@
|
||||||
0.1% in inter step 12/14: eliminate-redundant-labels
|
0.1% in inter step 12/14: eliminate-redundant-labels
|
||||||
0.1% in inter step 4/14: parse-linked-matter
|
0.1% in inter step 4/14: parse-linked-matter
|
||||||
0.1% in inter step 5/14: resolve-conditional-compilation
|
0.1% in inter step 5/14: resolve-conditional-compilation
|
||||||
2.4% not specifically accounted for
|
2.1% not specifically accounted for
|
||||||
1.7% in supervisor
|
1.7% in supervisor
|
||||||
0.3% not specifically accounted for
|
0.3% not specifically accounted for
|
||||||
|
|
|
@ -1,9 +1,57 @@
|
||||||
|
/* This is a library of C code to support Inform or other Inter programs compiled
|
||||||
|
tp ANSI C. It was generated mechanically from the Inter source code, so to
|
||||||
|
change it, edit that and not this. */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
typedef struct i7varargs {
|
#define i7_lvalue_SET 1
|
||||||
i7val args[10];
|
#define i7_lvalue_PREDEC 2
|
||||||
} i7varargs;
|
#define i7_lvalue_POSTDEC 3
|
||||||
|
#define i7_lvalue_PREINC 4
|
||||||
|
#define i7_lvalue_POSTINC 5
|
||||||
|
#define i7_lvalue_SETBIT 6
|
||||||
|
#define i7_lvalue_CLEARBIT 7
|
||||||
|
i7byte i7mem[];
|
||||||
|
i7val i7_read_word(i7byte data[], i7val array_address, i7val array_index) {
|
||||||
|
int byte_position = array_address + 4*array_index;
|
||||||
|
return (i7val) data[byte_position] +
|
||||||
|
0x100*((i7val) data[byte_position + 1]) +
|
||||||
|
0x10000*((i7val) data[byte_position + 2]) +
|
||||||
|
0x1000000*((i7val) data[byte_position + 3]);
|
||||||
|
}
|
||||||
|
#define i7_lvalue_SET 1
|
||||||
|
#define i7_lvalue_PREDEC 2
|
||||||
|
#define i7_lvalue_POSTDEC 3
|
||||||
|
#define i7_lvalue_PREINC 4
|
||||||
|
#define i7_lvalue_POSTINC 5
|
||||||
|
#define i7_lvalue_SETBIT 6
|
||||||
|
#define i7_lvalue_CLEARBIT 7
|
||||||
|
#define I7BYTE_3(V) ((V & 0xFF000000) >> 24)
|
||||||
|
#define I7BYTE_2(V) ((V & 0x00FF0000) >> 16)
|
||||||
|
#define I7BYTE_1(V) ((V & 0x0000FF00) >> 8)
|
||||||
|
#define I7BYTE_0(V) (V & 0x000000FF)
|
||||||
|
|
||||||
|
i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val new_val, int way) {
|
||||||
|
i7val old_val = i7_read_word(data, array_address, array_index);
|
||||||
|
i7val return_val = new_val;
|
||||||
|
switch (way) {
|
||||||
|
case i7_lvalue_PREDEC: return_val = old_val; new_val = old_val-1; break;
|
||||||
|
case i7_lvalue_POSTDEC: return_val = old_val-1; new_val = old_val-1; break;
|
||||||
|
case i7_lvalue_PREINC: return_val = old_val; new_val = old_val+1; break;
|
||||||
|
case i7_lvalue_POSTINC: return_val = old_val+1; new_val = old_val+1; break;
|
||||||
|
case i7_lvalue_SETBIT: new_val = old_val | new_val; return_val = new_val; break;
|
||||||
|
case i7_lvalue_CLEARBIT: new_val = old_val &(~new_val); return_val = new_val; break;
|
||||||
|
}
|
||||||
|
int byte_position = array_address + 4*array_index;
|
||||||
|
data[byte_position] = I7BYTE_0(new_val);
|
||||||
|
data[byte_position+1] = I7BYTE_1(new_val);
|
||||||
|
data[byte_position+2] = I7BYTE_2(new_val);
|
||||||
|
data[byte_position+3] = I7BYTE_3(new_val);
|
||||||
|
return return_val;
|
||||||
|
}
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
i7val i7_mgl_self = 0;
|
i7val i7_mgl_self = 0;
|
||||||
i7val i7_mgl_sp = 0;
|
i7val i7_mgl_sp = 0;
|
||||||
|
@ -13,39 +61,6 @@ i7val i7_mgl_debug_flag = 0;
|
||||||
i7val i7_tmp = 0;
|
i7val i7_tmp = 0;
|
||||||
int i7_seed = 197;
|
int i7_seed = 197;
|
||||||
|
|
||||||
#define i7_cpv_SET 1
|
|
||||||
#define i7_cpv_PREDEC 2
|
|
||||||
#define i7_cpv_POSTDEC 3
|
|
||||||
#define i7_cpv_PREINC 4
|
|
||||||
#define i7_cpv_POSTINC 5
|
|
||||||
|
|
||||||
#define I7BYTE_3(V) ((V & 0xFF000000) >> 24)
|
|
||||||
#define I7BYTE_2(V) ((V & 0x00FF0000) >> 16)
|
|
||||||
#define I7BYTE_1(V) ((V & 0x0000FF00) >> 8)
|
|
||||||
#define I7BYTE_0(V) (V & 0x000000FF)
|
|
||||||
|
|
||||||
i7val i7_lookup(i7byte i7bytes[], i7val offset, i7val ind) {
|
|
||||||
ind = offset + 4*ind;
|
|
||||||
return ((i7val) i7bytes[ind]) + 0x100*((i7val) i7bytes[ind+1]) +
|
|
||||||
0x10000*((i7val) i7bytes[ind+2]) + 0x1000000*((i7val) i7bytes[ind+3]);
|
|
||||||
}
|
|
||||||
|
|
||||||
i7val write_i7_lookup(i7byte i7bytes[], i7val offset, i7val ind, i7val V, int way) {
|
|
||||||
i7val val = i7_lookup(i7bytes, offset, ind);
|
|
||||||
i7val RV = V;
|
|
||||||
switch (way) {
|
|
||||||
case i7_cpv_PREDEC: RV = val; V = val-1; break;
|
|
||||||
case i7_cpv_POSTDEC: RV = val-1; V = val-1; break;
|
|
||||||
case i7_cpv_PREINC: RV = val; V = val+1; break;
|
|
||||||
case i7_cpv_POSTINC: RV = val+1; V = val+1; break;
|
|
||||||
}
|
|
||||||
ind = offset + 4*ind;
|
|
||||||
i7bytes[ind] = I7BYTE_0(V);
|
|
||||||
i7bytes[ind+1] = I7BYTE_1(V);
|
|
||||||
i7bytes[ind+2] = I7BYTE_2(V);
|
|
||||||
i7bytes[ind+3] = I7BYTE_3(V);
|
|
||||||
return RV;
|
|
||||||
}
|
|
||||||
|
|
||||||
void glulx_accelfunc(i7val x, i7val y) {
|
void glulx_accelfunc(i7val x, i7val y) {
|
||||||
printf("Unimplemented: glulx_accelfunc.\n");
|
printf("Unimplemented: glulx_accelfunc.\n");
|
||||||
|
@ -487,6 +502,11 @@ i7val i7_mgl_sharp_dictionary_table = 0;
|
||||||
i7val i7_mgl_sharp_grammar_table = 0;
|
i7val i7_mgl_sharp_grammar_table = 0;
|
||||||
|
|
||||||
#define i7_mgl_FLOAT_NAN 0
|
#define i7_mgl_FLOAT_NAN 0
|
||||||
|
|
||||||
|
typedef struct i7varargs {
|
||||||
|
i7val args[10];
|
||||||
|
} i7varargs;
|
||||||
|
|
||||||
i7val fn_i7_mgl_metaclass(int n, i7val id) {
|
i7val fn_i7_mgl_metaclass(int n, i7val id) {
|
||||||
if (id <= 0) return 0;
|
if (id <= 0) return 0;
|
||||||
if (id >= I7VAL_FUNCTIONS_BASE) return i7_mgl_Routine;
|
if (id >= I7VAL_FUNCTIONS_BASE) return i7_mgl_Routine;
|
||||||
|
@ -520,14 +540,6 @@ typedef struct i7_property_set {
|
||||||
} i7_property_set;
|
} i7_property_set;
|
||||||
i7_property_set i7_properties[i7_max_objects];
|
i7_property_set i7_properties[i7_max_objects];
|
||||||
|
|
||||||
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
|
||||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
|
||||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
|
||||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
|
||||||
owner_id = i7_class_of[owner_id];
|
|
||||||
return i7_properties[(int) owner_id].value[(int) prop_id];
|
|
||||||
}
|
|
||||||
|
|
||||||
void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
||||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) {
|
(prop_id < 0) || (prop_id >= i7_no_property_ids)) {
|
||||||
|
@ -537,14 +549,24 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
||||||
i7_properties[(int) owner_id].value[(int) prop_id] = val;
|
i7_properties[(int) owner_id].value[(int) prop_id] = val;
|
||||||
i7_properties[(int) owner_id].value_set[(int) prop_id] = 1;
|
i7_properties[(int) owner_id].value_set[(int) prop_id] = 1;
|
||||||
}
|
}
|
||||||
|
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
||||||
|
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||||
|
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
||||||
|
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
||||||
|
owner_id = i7_class_of[owner_id];
|
||||||
|
return i7_properties[(int) owner_id].value[(int) prop_id];
|
||||||
|
}
|
||||||
|
|
||||||
i7val i7_change_prop_value(i7val obj, i7val pr, i7val to, int way) {
|
i7val i7_change_prop_value(i7val obj, i7val pr, i7val to, int way) {
|
||||||
i7val val = i7_read_prop_value(obj, pr), new_val = val;
|
i7val val = i7_read_prop_value(obj, pr), new_val = val;
|
||||||
switch (way) {
|
switch (way) {
|
||||||
case i7_cpv_SET: i7_write_prop_value(obj, pr, to); new_val = to; break;
|
case i7_lvalue_SET: i7_write_prop_value(obj, pr, to); new_val = to; break;
|
||||||
case i7_cpv_PREDEC: new_val = val; i7_write_prop_value(obj, pr, val-1); break;
|
case i7_lvalue_PREDEC: new_val = val; i7_write_prop_value(obj, pr, val-1); break;
|
||||||
case i7_cpv_POSTDEC: new_val = val-1; i7_write_prop_value(obj, pr, new_val); break;
|
case i7_lvalue_POSTDEC: new_val = val-1; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
case i7_cpv_PREINC: new_val = val; i7_write_prop_value(obj, pr, val+1); break;
|
case i7_lvalue_PREINC: new_val = val; i7_write_prop_value(obj, pr, val+1); break;
|
||||||
case i7_cpv_POSTINC: new_val = val+1; i7_write_prop_value(obj, pr, new_val); break;
|
case i7_lvalue_POSTINC: new_val = val+1; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
|
case i7_lvalue_SETBIT: new_val = val | new_val; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
|
case i7_lvalue_CLEARBIT: new_val = val &(~new_val); i7_write_prop_value(obj, pr, new_val); break;
|
||||||
}
|
}
|
||||||
return new_val;
|
return new_val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -385,3 +385,37 @@ text_stream *CodeGen::CL::name(inter_symbol *symb) {
|
||||||
if (Inter::Symbols::get_translate(symb)) return Inter::Symbols::get_translate(symb);
|
if (Inter::Symbols::get_translate(symb)) return Inter::Symbols::get_translate(symb);
|
||||||
return symb->symbol_name;
|
return symb->symbol_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ =
|
||||||
|
int CodeGen::CL::node_is_word_array_ref(inter_tree *I, inter_tree_node *P) {
|
||||||
|
int reffed = FALSE;
|
||||||
|
while (P->W.data[ID_IFLD] == REFERENCE_IST) {
|
||||||
|
P = InterTree::first_child(P);
|
||||||
|
reffed = TRUE;
|
||||||
|
}
|
||||||
|
if (P->W.data[ID_IFLD] == INV_IST) {
|
||||||
|
if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {
|
||||||
|
inter_symbol *prim = Inter::Inv::invokee(P);
|
||||||
|
inter_ti bip = Primitives::to_bip(I, prim);
|
||||||
|
if (bip == LOOKUPREF_BIP) return TRUE;
|
||||||
|
if ((bip == LOOKUP_BIP) && (reffed)) return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CodeGen::CL::node_is_property_ref(inter_tree *I, inter_tree_node *P) {
|
||||||
|
int reffed = FALSE;
|
||||||
|
while (P->W.data[ID_IFLD] == REFERENCE_IST) {
|
||||||
|
P = InterTree::first_child(P);
|
||||||
|
reffed = TRUE;
|
||||||
|
}
|
||||||
|
if (P->W.data[ID_IFLD] == INV_IST) {
|
||||||
|
if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {
|
||||||
|
inter_symbol *prim = Inter::Inv::invokee(P);
|
||||||
|
inter_ti bip = Primitives::to_bip(I, prim);
|
||||||
|
if (bip == PROPERTYVALUE_BIP) return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
|
@ -8,10 +8,6 @@ To generate I6 code from intermediate code.
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
typedef struct i7varargs {
|
|
||||||
i7val args[10];
|
|
||||||
} i7varargs;
|
|
||||||
|
|
||||||
i7val i7_mgl_self = 0;
|
i7val i7_mgl_self = 0;
|
||||||
i7val i7_mgl_sp = 0;
|
i7val i7_mgl_sp = 0;
|
||||||
#define i7_mgl_Grammar__Version 2
|
#define i7_mgl_Grammar__Version 2
|
||||||
|
@ -20,39 +16,6 @@ i7val i7_mgl_debug_flag = 0;
|
||||||
i7val i7_tmp = 0;
|
i7val i7_tmp = 0;
|
||||||
int i7_seed = 197;
|
int i7_seed = 197;
|
||||||
|
|
||||||
#define i7_cpv_SET 1
|
|
||||||
#define i7_cpv_PREDEC 2
|
|
||||||
#define i7_cpv_POSTDEC 3
|
|
||||||
#define i7_cpv_PREINC 4
|
|
||||||
#define i7_cpv_POSTINC 5
|
|
||||||
|
|
||||||
#define I7BYTE_3(V) ((V & 0xFF000000) >> 24)
|
|
||||||
#define I7BYTE_2(V) ((V & 0x00FF0000) >> 16)
|
|
||||||
#define I7BYTE_1(V) ((V & 0x0000FF00) >> 8)
|
|
||||||
#define I7BYTE_0(V) (V & 0x000000FF)
|
|
||||||
|
|
||||||
i7val i7_lookup(i7byte i7bytes[], i7val offset, i7val ind) {
|
|
||||||
ind = offset + 4*ind;
|
|
||||||
return ((i7val) i7bytes[ind]) + 0x100*((i7val) i7bytes[ind+1]) +
|
|
||||||
0x10000*((i7val) i7bytes[ind+2]) + 0x1000000*((i7val) i7bytes[ind+3]);
|
|
||||||
}
|
|
||||||
|
|
||||||
i7val write_i7_lookup(i7byte i7bytes[], i7val offset, i7val ind, i7val V, int way) {
|
|
||||||
i7val val = i7_lookup(i7bytes, offset, ind);
|
|
||||||
i7val RV = V;
|
|
||||||
switch (way) {
|
|
||||||
case i7_cpv_PREDEC: RV = val; V = val-1; break;
|
|
||||||
case i7_cpv_POSTDEC: RV = val-1; V = val-1; break;
|
|
||||||
case i7_cpv_PREINC: RV = val; V = val+1; break;
|
|
||||||
case i7_cpv_POSTINC: RV = val+1; V = val+1; break;
|
|
||||||
}
|
|
||||||
ind = offset + 4*ind;
|
|
||||||
i7bytes[ind] = I7BYTE_0(V);
|
|
||||||
i7bytes[ind+1] = I7BYTE_1(V);
|
|
||||||
i7bytes[ind+2] = I7BYTE_2(V);
|
|
||||||
i7bytes[ind+3] = I7BYTE_3(V);
|
|
||||||
return RV;
|
|
||||||
}
|
|
||||||
|
|
||||||
void glulx_accelfunc(i7val x, i7val y) {
|
void glulx_accelfunc(i7val x, i7val y) {
|
||||||
printf("Unimplemented: glulx_accelfunc.\n");
|
printf("Unimplemented: glulx_accelfunc.\n");
|
||||||
|
@ -494,36 +457,16 @@ i7val i7_mgl_sharp_dictionary_table = 0;
|
||||||
i7val i7_mgl_sharp_grammar_table = 0;
|
i7val i7_mgl_sharp_grammar_table = 0;
|
||||||
|
|
||||||
#define i7_mgl_FLOAT_NAN 0
|
#define i7_mgl_FLOAT_NAN 0
|
||||||
|
|
||||||
|
typedef struct i7varargs {
|
||||||
|
i7val args[10];
|
||||||
|
} i7varargs;
|
||||||
|
|
||||||
=
|
=
|
||||||
|
|
||||||
@
|
@
|
||||||
|
|
||||||
=
|
=
|
||||||
|
|
||||||
void CTarget::begin_memory(code_generation *gen) {
|
|
||||||
generated_segment *saved = CodeGen::select(gen, c_header_matter_I7CGS);
|
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
|
||||||
WRITE("i7byte i7mem[];\n");
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
|
|
||||||
saved = CodeGen::select(gen, c_mem_I7CGS);
|
|
||||||
OUT = CodeGen::current(gen);
|
|
||||||
WRITE("i7byte i7mem[] = {\n");
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CTarget::end_memory(code_generation *gen) {
|
|
||||||
generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);
|
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
|
||||||
WRITE("0, 0 };\n");
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
|
|
||||||
saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
|
||||||
OUT = CodeGen::current(gen);
|
|
||||||
WRITE("char *dqs[] = {\n%S\"\" };\n", C_GEN_DATA(double_quoted_C));
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CTarget::begin_dictionary_words(code_generation *gen) {
|
void CTarget::begin_dictionary_words(code_generation *gen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,6 +478,11 @@ void CTarget::end_dictionary_words(code_generation *gen) {
|
||||||
WRITE("#define i7_p_dword_%d %d\n", i, 2*i + 1);
|
WRITE("#define i7_p_dword_%d %d\n", i, 2*i + 1);
|
||||||
}
|
}
|
||||||
CodeGen::deselect(gen, saved);
|
CodeGen::deselect(gen, saved);
|
||||||
|
|
||||||
|
saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
||||||
|
OUT = CodeGen::current(gen);
|
||||||
|
WRITE("char *dqs[] = {\n%S\"\" };\n", C_GEN_DATA(double_quoted_C));
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTarget::end_functions(code_generation *gen) {
|
void CTarget::end_functions(code_generation *gen) {
|
||||||
|
@ -622,14 +570,20 @@ void CTarget::mangle(code_generation_target *cgt, OUTPUT_STREAM, text_stream *id
|
||||||
} else WRITE("i7_mgl_%S", identifier);
|
} else WRITE("i7_mgl_%S", identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
int C_write_lookup_mode = FALSE;
|
|
||||||
|
|
||||||
int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen,
|
int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen,
|
||||||
inter_symbol *prim_name, inter_tree_node *P) {
|
inter_symbol *prim_name, inter_tree_node *P) {
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
int suppress_terminal_semicolon = FALSE;
|
int suppress_terminal_semicolon = FALSE;
|
||||||
inter_tree *I = gen->from;
|
inter_tree *I = gen->from;
|
||||||
inter_ti bip = Primitives::to_bip(I, prim_name);
|
inter_ti bip = Primitives::to_bip(I, prim_name);
|
||||||
|
|
||||||
|
int r = CReferences::compile_primitive(gen, bip, P);
|
||||||
|
if (r != NOT_APPLICABLE) return r;
|
||||||
|
r = CMemoryModel::compile_primitive(gen, bip, P);
|
||||||
|
if (r != NOT_APPLICABLE) return r;
|
||||||
|
r = CObjectModel::compile_primitive(gen, bip, P);
|
||||||
|
if (r != NOT_APPLICABLE) return r;
|
||||||
|
|
||||||
switch (bip) {
|
switch (bip) {
|
||||||
case INVERSION_BIP: break; /* we won't support this in C */
|
case INVERSION_BIP: break; /* we won't support this in C */
|
||||||
|
|
||||||
|
@ -662,31 +616,6 @@ int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen
|
||||||
|
|
||||||
case PUSH_BIP: WRITE("i7_push("); INV_A1; WRITE(")"); break;
|
case PUSH_BIP: WRITE("i7_push("); INV_A1; WRITE(")"); break;
|
||||||
case PULL_BIP: INV_A1; WRITE(" = i7_pull()"); break;
|
case PULL_BIP: INV_A1; WRITE(" = i7_pull()"); break;
|
||||||
case PREINCREMENT_BIP: @<Generate primitive for store@>; break;
|
|
||||||
case POSTINCREMENT_BIP: @<Generate primitive for store@>; break;
|
|
||||||
case PREDECREMENT_BIP: @<Generate primitive for store@>; break;
|
|
||||||
case POSTDECREMENT_BIP: @<Generate primitive for store@>; break;
|
|
||||||
case STORE_BIP: @<Generate primitive for store@>; break;
|
|
||||||
case SETBIT_BIP: INV_A1; WRITE(" = "); INV_A1; WRITE(" | "); INV_A2; break;
|
|
||||||
case CLEARBIT_BIP: INV_A1; WRITE(" = "); INV_A1; WRITE(" &~ ("); INV_A2; WRITE(")"); break;
|
|
||||||
case LOOKUP_BIP: if (C_write_lookup_mode) {
|
|
||||||
C_write_lookup_mode = FALSE;
|
|
||||||
@<Generate primitive for lookupref@>;
|
|
||||||
} else {
|
|
||||||
@<Generate primitive for lookup@>;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LOOKUPBYTE_BIP: @<Generate primitive for lookupbyte@>; break;
|
|
||||||
case LOOKUPREF_BIP: @<Generate primitive for lookupref@>; break;
|
|
||||||
case PROPERTYADDRESS_BIP: WRITE("i7_prop_addr("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
|
||||||
case PROPERTYLENGTH_BIP: WRITE("i7_prop_len("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
|
||||||
case PROPERTYVALUE_BIP: if (C_write_lookup_mode) {
|
|
||||||
C_write_lookup_mode = FALSE;
|
|
||||||
WRITE("i7_change_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE(", ");
|
|
||||||
} else {
|
|
||||||
WRITE("i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BREAK_BIP: WRITE("break"); break;
|
case BREAK_BIP: WRITE("break"); break;
|
||||||
case CONTINUE_BIP: WRITE("continue"); break;
|
case CONTINUE_BIP: WRITE("continue"); break;
|
||||||
case RETURN_BIP: @<Generate primitive for return@>; break;
|
case RETURN_BIP: @<Generate primitive for return@>; break;
|
||||||
|
@ -713,13 +642,6 @@ int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen
|
||||||
WRITE("i7_call_5("); INV_A1; WRITE(", ");
|
WRITE("i7_call_5("); INV_A1; WRITE(", ");
|
||||||
INV_A2; WRITE(", "); INV_A3; WRITE(", "); INV_A4; WRITE(", ");
|
INV_A2; WRITE(", "); INV_A3; WRITE(", "); INV_A4; WRITE(", ");
|
||||||
INV_A5; WRITE(", "); INV_A6; WRITE(")"); break;
|
INV_A5; WRITE(", "); INV_A6; WRITE(")"); break;
|
||||||
case MESSAGE0_BIP: WRITE("i7_call_0(i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE("))"); break;
|
|
||||||
case MESSAGE1_BIP: WRITE("i7_call_1(i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE("), ");
|
|
||||||
INV_A3; WRITE(")"); break;
|
|
||||||
case MESSAGE2_BIP: WRITE("i7_call_2(i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE("), ");
|
|
||||||
INV_A3; WRITE(", "); INV_A4; WRITE(")"); break;
|
|
||||||
case MESSAGE3_BIP: WRITE("i7_call_3(i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE("), ");
|
|
||||||
INV_A3; WRITE(", "); INV_A4; WRITE(", "); INV_A5; WRITE(")"); break;
|
|
||||||
case CALLMESSAGE0_BIP: WRITE("i7_ccall_0("); INV_A1; WRITE(")"); break;
|
case CALLMESSAGE0_BIP: WRITE("i7_ccall_0("); INV_A1; WRITE(")"); break;
|
||||||
case CALLMESSAGE1_BIP: WRITE("i7_ccall_1("); INV_A1; WRITE(", ");
|
case CALLMESSAGE1_BIP: WRITE("i7_ccall_1("); INV_A1; WRITE(", ");
|
||||||
INV_A2; WRITE(")"); break;
|
INV_A2; WRITE(")"); break;
|
||||||
|
@ -740,8 +662,6 @@ int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen
|
||||||
|
|
||||||
case MOVE_BIP: WRITE("i7_move("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
case MOVE_BIP: WRITE("i7_move("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
||||||
case REMOVE_BIP: WRITE("i7_move("); INV_A1; WRITE(", 0)"); break;
|
case REMOVE_BIP: WRITE("i7_move("); INV_A1; WRITE(", 0)"); break;
|
||||||
case GIVE_BIP: WRITE("i7_give("); INV_A1; WRITE(", "); INV_A2; WRITE(", 1)"); break;
|
|
||||||
case TAKE_BIP: WRITE("i7_give("); INV_A1; WRITE(", "); INV_A2; WRITE(", 0)"); break;
|
|
||||||
|
|
||||||
case ALTERNATIVECASE_BIP: INV_A1; WRITE(", "); INV_A2; break;
|
case ALTERNATIVECASE_BIP: INV_A1; WRITE(", "); INV_A2; break;
|
||||||
case SEQUENTIAL_BIP: WRITE("("); INV_A1; WRITE(","); INV_A2; WRITE(")"); break;
|
case SEQUENTIAL_BIP: WRITE("("); INV_A1; WRITE(","); INV_A2; WRITE(")"); break;
|
||||||
|
@ -789,43 +709,6 @@ int CTarget::compile_primitive(code_generation_target *cgt, code_generation *gen
|
||||||
@<Generate comparison@> =
|
@<Generate comparison@> =
|
||||||
CTarget::comparison(cgt, gen, bip, InterTree::first_child(P), InterTree::second_child(P));
|
CTarget::comparison(cgt, gen, bip, InterTree::first_child(P), InterTree::second_child(P));
|
||||||
|
|
||||||
@<Generate primitive for store@> =
|
|
||||||
text_stream *store_form = NULL;
|
|
||||||
switch (bip) {
|
|
||||||
case PREINCREMENT_BIP: store_form = I"i7_cpv_PREINC"; break;
|
|
||||||
case POSTINCREMENT_BIP: store_form = I"i7_cpv_POSTINC"; break;
|
|
||||||
case PREDECREMENT_BIP: store_form = I"i7_cpv_PREDEC"; break;
|
|
||||||
case POSTDECREMENT_BIP: store_form = I"i7_cpv_POSTDEC"; break;
|
|
||||||
case STORE_BIP: store_form = I"i7_cpv_SET"; break;
|
|
||||||
}
|
|
||||||
inter_tree_node *ref = InterTree::first_child(P);
|
|
||||||
if (CTarget::basically_an_array_write(gen->from, ref)) {
|
|
||||||
WRITE("("); C_write_lookup_mode = TRUE; INV_A1; C_write_lookup_mode = FALSE;
|
|
||||||
if (bip == STORE_BIP) { INV_A2; } else { WRITE("0"); }
|
|
||||||
WRITE(", %S))", store_form);
|
|
||||||
} else if (CTarget::basically_a_property_write(gen->from, ref)) {
|
|
||||||
WRITE("("); C_write_lookup_mode = TRUE; INV_A1; C_write_lookup_mode = FALSE;
|
|
||||||
if (bip == STORE_BIP) { INV_A2; } else { WRITE("0"); }
|
|
||||||
WRITE(", %S))", store_form);
|
|
||||||
} else {
|
|
||||||
switch (bip) {
|
|
||||||
case PREINCREMENT_BIP: WRITE("++("); INV_A1; WRITE(")"); break;
|
|
||||||
case POSTINCREMENT_BIP: WRITE("("); INV_A1; WRITE(")++"); break;
|
|
||||||
case PREDECREMENT_BIP: WRITE("--("); INV_A1; WRITE(")"); break;
|
|
||||||
case POSTDECREMENT_BIP: WRITE("("); INV_A1; WRITE(")--"); break;
|
|
||||||
case STORE_BIP: WRITE("("); INV_A1; WRITE(" = "); INV_A2; WRITE(")"); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@<Generate primitive for lookup@> =
|
|
||||||
WRITE("i7_lookup(i7mem, "); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
|
||||||
|
|
||||||
@<Generate primitive for lookupref@> =
|
|
||||||
WRITE("write_i7_lookup(i7mem, "); INV_A1; WRITE(", "); INV_A2; WRITE(", ");
|
|
||||||
|
|
||||||
@<Generate primitive for lookupbyte@> =
|
|
||||||
WRITE("i7mem["); INV_A1; WRITE(" + "); INV_A2; WRITE("]");
|
|
||||||
|
|
||||||
@<Generate primitive for return@> =
|
@<Generate primitive for return@> =
|
||||||
int rboolean = NOT_APPLICABLE;
|
int rboolean = NOT_APPLICABLE;
|
||||||
inter_tree_node *V = InterTree::first_child(P);
|
inter_tree_node *V = InterTree::first_child(P);
|
||||||
|
@ -1103,20 +986,20 @@ int CTarget::declare_variable(code_generation_target *cgt, code_generation *gen,
|
||||||
CodeGen::deselect(gen, saved);
|
CodeGen::deselect(gen, saved);
|
||||||
}
|
}
|
||||||
if (Inter::Symbols::read_annotation(var_name, EXPLICIT_VARIABLE_IANN) != 1) {
|
if (Inter::Symbols::read_annotation(var_name, EXPLICIT_VARIABLE_IANN) != 1) {
|
||||||
if (k == 0) CTarget::begin_array(cgt, gen, I"Global_Vars", WORD_ARRAY_FORMAT);
|
if (k == 0) CMemoryModel::begin_array(cgt, gen, I"Global_Vars", WORD_ARRAY_FORMAT);
|
||||||
TEMPORARY_TEXT(val)
|
TEMPORARY_TEXT(val)
|
||||||
CodeGen::select_temporary(gen, val);
|
CodeGen::select_temporary(gen, val);
|
||||||
CodeGen::CL::literal(gen, NULL, Inter::Packages::scope_of(P), P->W.data[VAL1_VAR_IFLD], P->W.data[VAL2_VAR_IFLD], FALSE);
|
CodeGen::CL::literal(gen, NULL, Inter::Packages::scope_of(P), P->W.data[VAL1_VAR_IFLD], P->W.data[VAL2_VAR_IFLD], FALSE);
|
||||||
CodeGen::deselect_temporary(gen);
|
CodeGen::deselect_temporary(gen);
|
||||||
CTarget::array_entry(cgt, gen, val, WORD_ARRAY_FORMAT);
|
CMemoryModel::array_entry(cgt, gen, val, WORD_ARRAY_FORMAT);
|
||||||
DISCARD_TEXT(val)
|
DISCARD_TEXT(val)
|
||||||
k++;
|
k++;
|
||||||
if (k == of) {
|
if (k == of) {
|
||||||
if (k < 2) {
|
if (k < 2) {
|
||||||
CTarget::array_entry(cgt, gen, I"0", WORD_ARRAY_FORMAT);
|
CMemoryModel::array_entry(cgt, gen, I"0", WORD_ARRAY_FORMAT);
|
||||||
CTarget::array_entry(cgt, gen, I"0", WORD_ARRAY_FORMAT);
|
CMemoryModel::array_entry(cgt, gen, I"0", WORD_ARRAY_FORMAT);
|
||||||
}
|
}
|
||||||
CTarget::end_array(cgt, gen, WORD_ARRAY_FORMAT);
|
CMemoryModel::end_array(cgt, gen, WORD_ARRAY_FORMAT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return k;
|
return k;
|
||||||
|
@ -1406,85 +1289,6 @@ void CTarget::declare_local_variable(code_generation_target *cgt, int pass,
|
||||||
DISCARD_TEXT(name)
|
DISCARD_TEXT(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
int C_array_entry_count = 0;
|
|
||||||
text_stream *C_array_name = NULL;
|
|
||||||
|
|
||||||
void CTarget::begin_array(code_generation_target *cgt, code_generation *gen, text_stream *array_name, int format) {
|
|
||||||
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
|
||||||
WRITE("#define ");
|
|
||||||
CTarget::mangle(cgt, OUT, array_name);
|
|
||||||
WRITE(" %d // An array in format %d\n", C_GEN_DATA(extent_of_i7mem), format);
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
|
|
||||||
if (C_array_name == NULL) C_array_name = Str::new();
|
|
||||||
Str::clear(C_array_name); WRITE_TO(C_array_name, "%S", array_name);
|
|
||||||
C_array_entry_count = 0;
|
|
||||||
|
|
||||||
if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT)) {
|
|
||||||
TEMPORARY_TEXT(extname)
|
|
||||||
WRITE_TO(extname, "xt_%S", array_name);
|
|
||||||
CTarget::array_entry(cgt, gen, extname, format);
|
|
||||||
DISCARD_TEXT(extname)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CTarget::array_entry(code_generation_target *cgt, code_generation *gen, text_stream *entry, int format) {
|
|
||||||
generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);
|
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
|
||||||
if ((format == TABLE_ARRAY_FORMAT) || (format == WORD_ARRAY_FORMAT)) {
|
|
||||||
WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n",
|
|
||||||
entry, entry, entry, entry);
|
|
||||||
C_GEN_DATA(extent_of_i7mem) += 4;
|
|
||||||
} else {
|
|
||||||
WRITE(" (i7byte) %S,\n", entry);
|
|
||||||
C_GEN_DATA(extent_of_i7mem) += 1;
|
|
||||||
}
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
C_array_entry_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CTarget::end_array(code_generation_target *cgt, code_generation *gen, int format) {
|
|
||||||
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
|
||||||
text_stream *OUT = CodeGen::current(gen);
|
|
||||||
if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT)) {
|
|
||||||
WRITE("#define xt_%S %d\n", C_array_name, C_array_entry_count-1);
|
|
||||||
}
|
|
||||||
CodeGen::deselect(gen, saved);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CTarget::basically_an_array_write(inter_tree *I, inter_tree_node *P) {
|
|
||||||
int reffed = FALSE;
|
|
||||||
while (P->W.data[ID_IFLD] == REFERENCE_IST) {
|
|
||||||
P = InterTree::first_child(P);
|
|
||||||
reffed = TRUE;
|
|
||||||
}
|
|
||||||
if (P->W.data[ID_IFLD] == INV_IST) {
|
|
||||||
if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {
|
|
||||||
inter_symbol *prim = Inter::Inv::invokee(P);
|
|
||||||
inter_ti bip = Primitives::to_bip(I, prim);
|
|
||||||
if (bip == LOOKUPREF_BIP) return TRUE;
|
|
||||||
if ((bip == LOOKUP_BIP) && (reffed)) return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CTarget::basically_a_property_write(inter_tree *I, inter_tree_node *P) {
|
|
||||||
int reffed = FALSE;
|
|
||||||
while (P->W.data[ID_IFLD] == REFERENCE_IST) {
|
|
||||||
P = InterTree::first_child(P);
|
|
||||||
reffed = TRUE;
|
|
||||||
}
|
|
||||||
if (P->W.data[ID_IFLD] == INV_IST) {
|
|
||||||
if (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE) {
|
|
||||||
inter_symbol *prim = Inter::Inv::invokee(P);
|
|
||||||
inter_ti bip = Primitives::to_bip(I, prim);
|
|
||||||
if (bip == PROPERTYVALUE_BIP) return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CTarget::new_fake_action(code_generation_target *cgt, code_generation *gen, text_stream *name) {
|
void CTarget::new_fake_action(code_generation_target *cgt, code_generation *gen, text_stream *name) {
|
||||||
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
||||||
|
|
279
inter/final-module/Chapter 5/C Memory Model.w
Normal file
279
inter/final-module/Chapter 5/C Memory Model.w
Normal file
|
@ -0,0 +1,279 @@
|
||||||
|
[CMemoryModel::] C Memory Model.
|
||||||
|
|
||||||
|
How arrays of all kinds are stored in C.
|
||||||
|
|
||||||
|
@h Setting up the model.
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::initialise(code_generation_target *cgt) {
|
||||||
|
METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CMemoryModel::begin_array);
|
||||||
|
METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CMemoryModel::array_entry);
|
||||||
|
METHOD_ADD(cgt, END_ARRAY_MTID, CMemoryModel::end_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct C_generation_memory_model_data {
|
||||||
|
int himem; /* high point of memory: 1 more than the largest legal address */
|
||||||
|
struct text_stream *array_name;
|
||||||
|
int entry_count;
|
||||||
|
int next_node_is_a_ref;
|
||||||
|
} C_generation_memory_model_data;
|
||||||
|
|
||||||
|
void CMemoryModel::initialise_data(code_generation *gen) {
|
||||||
|
C_GEN_DATA(memdata.himem) = 0;
|
||||||
|
C_GEN_DATA(memdata.array_name) = Str::new();
|
||||||
|
C_GEN_DATA(memdata.entry_count) = 0;
|
||||||
|
C_GEN_DATA(memdata.next_node_is_a_ref) = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Byte-addressable memory.
|
||||||
|
The Inter semantics require that there be an area of byte-accessible memory:
|
||||||
|
|
||||||
|
(a) Byte-accessible memory must contain all of the arrays. These can but need
|
||||||
|
not have alignment gaps in between them. (For C, they do not.)
|
||||||
|
(b) "Addresses" in this memory identify individual byte positions in it. These
|
||||||
|
can but need not start at 0. (For C, they do.) They must not be too large to
|
||||||
|
fit into an Inter value.
|
||||||
|
(c) When an array name is compiled, its runtime value must be its address.
|
||||||
|
(d) When an Inter value is stored in byte-accessible memory, it occupies either
|
||||||
|
2 or 4 consecutive bytes, with the little end first. The result is called a
|
||||||
|
"word". (For C, always 4, which is always |sizeof(i7val)|.) Conversion between
|
||||||
|
a word stored in memory and an Inter value must be faithful in both directions.
|
||||||
|
(e) Words can be stored at any byte position, and not only at (say) multiples
|
||||||
|
of 2 or 4.
|
||||||
|
(f) Arrays in memory are free to contain a mixture of bytes and words: some do.
|
||||||
|
(g) Data may be written in byte form and read back in word form, or vice versa.
|
||||||
|
|
||||||
|
We will manage that with a single C array. This is first predeclared here:
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
i7byte i7mem[];
|
||||||
|
=
|
||||||
|
|
||||||
|
@ Declaring that array is our main task in this section.
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::begin(code_generation *gen) {
|
||||||
|
generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
WRITE("i7byte i7mem[] = {\n");
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ We will end the array with two dummy bytes (which should never be accessed)
|
||||||
|
just in case, and to ensure that it is never empty, which would be illegal
|
||||||
|
in C.
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::end(code_generation *gen) {
|
||||||
|
generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
WRITE("0, 0 };\n");
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Reading and writing memory.
|
||||||
|
Given the above array, it's easy to read and write bytes: if |a| is the address
|
||||||
|
then we can simply refer to |i7mem[a]|. Words are more challenging since we
|
||||||
|
need to pack and unpack them.
|
||||||
|
|
||||||
|
The following function reads a word which is in entry |array_index| (counting
|
||||||
|
0, 1, 2, ...) in the array which begins at the byte address |array_address| in
|
||||||
|
the bank of memory |data|. In practice, we will only every use this function
|
||||||
|
with |data| set to |i7mem|.
|
||||||
|
|
||||||
|
The equivalent for reading a byte entry is |data[array_address + array_index]|.
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
i7val i7_read_word(i7byte data[], i7val array_address, i7val array_index) {
|
||||||
|
int byte_position = array_address + 4*array_index;
|
||||||
|
return (i7val) data[byte_position] +
|
||||||
|
0x100*((i7val) data[byte_position + 1]) +
|
||||||
|
0x10000*((i7val) data[byte_position + 2]) +
|
||||||
|
0x1000000*((i7val) data[byte_position + 3]);
|
||||||
|
}
|
||||||
|
=
|
||||||
|
|
||||||
|
Now for writing. Memory locations (like variables and property values) can not
|
||||||
|
only be "set", that is, written to, but also pre-decremented, post-decremented,
|
||||||
|
pre-incremented and post-incremented. This is the equivalent of being able to
|
||||||
|
apply |++| or |--| either side, in C terms. The following enumerated constants
|
||||||
|
identify which of these five operations to perform:
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
#define i7_lvalue_SET 1
|
||||||
|
#define i7_lvalue_PREDEC 2
|
||||||
|
#define i7_lvalue_POSTDEC 3
|
||||||
|
#define i7_lvalue_PREINC 4
|
||||||
|
#define i7_lvalue_POSTINC 5
|
||||||
|
#define i7_lvalue_SETBIT 6
|
||||||
|
#define i7_lvalue_CLEARBIT 7
|
||||||
|
=
|
||||||
|
|
||||||
|
@ Packing, unlike unpacking, is done with macros so that it is possible to
|
||||||
|
express a packed word in constant context, which we will need later.
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
#define I7BYTE_3(V) ((V & 0xFF000000) >> 24)
|
||||||
|
#define I7BYTE_2(V) ((V & 0x00FF0000) >> 16)
|
||||||
|
#define I7BYTE_1(V) ((V & 0x0000FF00) >> 8)
|
||||||
|
#define I7BYTE_0(V) (V & 0x000000FF)
|
||||||
|
|
||||||
|
i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val new_val, int way) {
|
||||||
|
i7val old_val = i7_read_word(data, array_address, array_index);
|
||||||
|
i7val return_val = new_val;
|
||||||
|
switch (way) {
|
||||||
|
case i7_lvalue_PREDEC: return_val = old_val; new_val = old_val-1; break;
|
||||||
|
case i7_lvalue_POSTDEC: return_val = old_val-1; new_val = old_val-1; break;
|
||||||
|
case i7_lvalue_PREINC: return_val = old_val; new_val = old_val+1; break;
|
||||||
|
case i7_lvalue_POSTINC: return_val = old_val+1; new_val = old_val+1; break;
|
||||||
|
case i7_lvalue_SETBIT: new_val = old_val | new_val; return_val = new_val; break;
|
||||||
|
case i7_lvalue_CLEARBIT: new_val = old_val &(~new_val); return_val = new_val; break;
|
||||||
|
}
|
||||||
|
int byte_position = array_address + 4*array_index;
|
||||||
|
data[byte_position] = I7BYTE_0(new_val);
|
||||||
|
data[byte_position+1] = I7BYTE_1(new_val);
|
||||||
|
data[byte_position+2] = I7BYTE_2(new_val);
|
||||||
|
data[byte_position+3] = I7BYTE_3(new_val);
|
||||||
|
return return_val;
|
||||||
|
}
|
||||||
|
=
|
||||||
|
|
||||||
|
@h Populating memory with arrays.
|
||||||
|
Inter supports four sorts of arrays, with behaviour as laid out in this 2x2 grid:
|
||||||
|
= (text)
|
||||||
|
| entries count 0, 1, 2,... | entry 0 is N, then entries count 1, 2, ..., N
|
||||||
|
-------------+-------------------------------+-----------------------------------------------
|
||||||
|
byte entries | BYTE_ARRAY_FORMAT | BUFFER_ARRAY_FORMAT
|
||||||
|
-------------+-------------------------------+-----------------------------------------------
|
||||||
|
word entries | WORD_ARRAY_FORMAT | TABLE_ARRAY_FORMAT
|
||||||
|
-------------+-------------------------------+-----------------------------------------------
|
||||||
|
=
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::begin_array(code_generation_target *cgt, code_generation *gen,
|
||||||
|
text_stream *array_name, int format) {
|
||||||
|
Str::clear(C_GEN_DATA(memdata.array_name));
|
||||||
|
WRITE_TO(C_GEN_DATA(memdata.array_name), "%S", array_name);
|
||||||
|
C_GEN_DATA(memdata.entry_count) = 0;
|
||||||
|
|
||||||
|
text_stream *format_name = I"unknown";
|
||||||
|
@<Work out the format name@>;
|
||||||
|
@<Define a constant for the byte address in memory where the array begins@>;
|
||||||
|
if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT))
|
||||||
|
@<Place the extent entry N at index 0@>;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Work out the format name@> =
|
||||||
|
switch (format) {
|
||||||
|
case BYTE_ARRAY_FORMAT: format_name = I"byte"; break;
|
||||||
|
case WORD_ARRAY_FORMAT: format_name = I"word"; break;
|
||||||
|
case BUFFER_ARRAY_FORMAT: format_name = I"buffer"; break;
|
||||||
|
case TABLE_ARRAY_FORMAT: format_name = I"table"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ Crucially, the array names are |#define| 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 |i7mem|,
|
||||||
|
or as initial values of variables, and so on.
|
||||||
|
|
||||||
|
Object, class and function names can also legally appear as array entries,
|
||||||
|
because they too are defined constants, equal to their IDs: see //C Object Model//.
|
||||||
|
|
||||||
|
@<Define a constant for the byte address in memory where the array begins@> =
|
||||||
|
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
WRITE("#define ");
|
||||||
|
CTarget::mangle(cgt, OUT, array_name);
|
||||||
|
WRITE(" %d /* = position in i7mem of %S array %S */\n",
|
||||||
|
C_GEN_DATA(memdata.himem), format_name, array_name);
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
|
|
||||||
|
@ Of course, right now we don't know |N|, the extent of the array. So we will
|
||||||
|
refer to this with a constant like |xt_myarray|, which we will retrospectively
|
||||||
|
predefine when the array ends.
|
||||||
|
|
||||||
|
@<Place the extent entry N at index 0@> =
|
||||||
|
TEMPORARY_TEXT(extname)
|
||||||
|
WRITE_TO(extname, "xt_%S", array_name);
|
||||||
|
CMemoryModel::array_entry(cgt, gen, extname, format);
|
||||||
|
DISCARD_TEXT(extname)
|
||||||
|
|
||||||
|
@ The call to |CMemoryModel::begin_array| is then followed by a series of calls to:
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::array_entry(code_generation_target *cgt, code_generation *gen,
|
||||||
|
text_stream *entry, int format) {
|
||||||
|
generated_segment *saved = CodeGen::select(gen, c_mem_I7CGS);
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
if ((format == TABLE_ARRAY_FORMAT) || (format == WORD_ARRAY_FORMAT))
|
||||||
|
@<This is a word entry@>
|
||||||
|
else
|
||||||
|
@<This is a byte entry@>;
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
|
C_GEN_DATA(memdata.entry_count)++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<This is a byte entry@> =
|
||||||
|
WRITE(" (i7byte) %S,\n", entry);
|
||||||
|
C_GEN_DATA(memdata.himem) += 1;
|
||||||
|
|
||||||
|
@ Now we see why it was important for |I7BYTE_0| and so on to be macros: they
|
||||||
|
use only arithmetic operations which can be constant-folded by the C compiler,
|
||||||
|
and therefore if |X| is a valid constant-context expression in C then so is
|
||||||
|
|I7BYTE_0(X)|.
|
||||||
|
|
||||||
|
@<This is a word entry@> =
|
||||||
|
WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n",
|
||||||
|
entry, entry, entry, entry);
|
||||||
|
C_GEN_DATA(memdata.himem) += 4;
|
||||||
|
|
||||||
|
@ When all the entries have been placed, the following is called. It does nothing
|
||||||
|
except to predeclare the extent constant, if one was used.
|
||||||
|
|
||||||
|
=
|
||||||
|
void CMemoryModel::end_array(code_generation_target *cgt, code_generation *gen, int format) {
|
||||||
|
if ((format == TABLE_ARRAY_FORMAT) || (format == BUFFER_ARRAY_FORMAT)) {
|
||||||
|
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
WRITE("#define xt_%S %d\n",
|
||||||
|
C_GEN_DATA(memdata.array_name), C_GEN_DATA(memdata.entry_count)-1);
|
||||||
|
CodeGen::deselect(gen, saved);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Primitives for byte and word lookup.
|
||||||
|
The signatures here are:
|
||||||
|
|
||||||
|
= (text)
|
||||||
|
primitive !lookup val val -> val
|
||||||
|
primitive !lookupbyte val val -> val
|
||||||
|
primitive !lookupref val val -> ref
|
||||||
|
=
|
||||||
|
|!lookupref| is a slightly redundant abbreviation for |reference| with |!lookup|
|
||||||
|
as a child. At present, there is no equivalent |!lookupbyteref|.
|
||||||
|
|
||||||
|
=
|
||||||
|
int CMemoryModel::compile_primitive(code_generation *gen, inter_ti bip, inter_tree_node *P) {
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
switch (bip) {
|
||||||
|
case LOOKUP_BIP: if (CReferences::am_I_a_ref(gen)) {
|
||||||
|
@<Word value as reference@>;
|
||||||
|
} else {
|
||||||
|
@<Word value as value@>;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LOOKUPBYTE_BIP: @<Byte value as value@>; break;
|
||||||
|
case LOOKUPREF_BIP: @<Word value as reference@>; break;
|
||||||
|
default: return NOT_APPLICABLE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Word value as value@> =
|
||||||
|
WRITE("i7_read_word(i7mem, "); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
||||||
|
|
||||||
|
@<Byte value as value@> =
|
||||||
|
WRITE("i7mem["); INV_A1; WRITE(" + "); INV_A2; WRITE("]");
|
||||||
|
|
||||||
|
@<Word value as reference@> =
|
||||||
|
WRITE("i7_write_word(i7mem, "); INV_A1; WRITE(", "); INV_A2; WRITE(", ");
|
|
@ -280,12 +280,12 @@ void CObjectModel::property_offset(code_generation_target *cgt, code_generation
|
||||||
if (C_GEN_DATA(objdata.C_property_offsets_made)++ == 0)
|
if (C_GEN_DATA(objdata.C_property_offsets_made)++ == 0)
|
||||||
@<Begin the property-offset creator function@>;
|
@<Begin the property-offset creator function@>;
|
||||||
|
|
||||||
WRITE("write_i7_lookup(i7mem, ");
|
WRITE("i7_write_word(i7mem, ");
|
||||||
if (as_attr) CTarget::mangle(cgt, OUT, I"attributed_property_offsets");
|
if (as_attr) CTarget::mangle(cgt, OUT, I"attributed_property_offsets");
|
||||||
else CTarget::mangle(cgt, OUT, I"valued_property_offsets");
|
else CTarget::mangle(cgt, OUT, I"valued_property_offsets");
|
||||||
WRITE(", ");
|
WRITE(", ");
|
||||||
CTarget::mangle(cgt, OUT, prop);
|
CTarget::mangle(cgt, OUT, prop);
|
||||||
WRITE(", %d, i7_cpv_SET);\n", pos);
|
WRITE(", %d, i7_lvalue_SET);\n", pos);
|
||||||
CodeGen::deselect(gen, saved);
|
CodeGen::deselect(gen, saved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,9 +296,9 @@ not deriving from an Inform program.
|
||||||
@<Begin the property-offset creator function@> =
|
@<Begin the property-offset creator function@> =
|
||||||
WRITE("i7val fn_i7_mgl_CreatePropertyOffsets(int argc) {\n"); INDENT;
|
WRITE("i7val fn_i7_mgl_CreatePropertyOffsets(int argc) {\n"); INDENT;
|
||||||
WRITE("for (int i=0; i<i7_mgl_attributed_property_offsets_SIZE; i++)\n"); INDENT;
|
WRITE("for (int i=0; i<i7_mgl_attributed_property_offsets_SIZE; i++)\n"); INDENT;
|
||||||
WRITE("write_i7_lookup(i7mem, i7_mgl_attributed_property_offsets, i, -1, i7_cpv_SET);\n"); OUTDENT;
|
WRITE("i7_write_word(i7mem, i7_mgl_attributed_property_offsets, i, -1, i7_lvalue_SET);\n"); OUTDENT;
|
||||||
WRITE("for (int i=0; i<i7_mgl_valued_property_offsets_SIZE; i++)\n"); INDENT;
|
WRITE("for (int i=0; i<i7_mgl_valued_property_offsets_SIZE; i++)\n"); INDENT;
|
||||||
WRITE("write_i7_lookup(i7mem, i7_mgl_valued_property_offsets, i, -1, i7_cpv_SET);\n"); OUTDENT;
|
WRITE("i7_write_word(i7mem, i7_mgl_valued_property_offsets, i, -1, i7_lvalue_SET);\n"); OUTDENT;
|
||||||
|
|
||||||
@ This function has no meaningful return value, but has to conform to our
|
@ This function has no meaningful return value, but has to conform to our
|
||||||
calling convention for Inform programs, which means it has to return something.
|
calling convention for Inform programs, which means it has to return something.
|
||||||
|
@ -359,6 +359,39 @@ void CObjectModel::assign_property(code_generation_target *cgt, code_generation
|
||||||
CodeGen::deselect(gen, saved);
|
CodeGen::deselect(gen, saved);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@h Primitives for property usage.
|
||||||
|
The following primitives are all implemented by calling suitable C functions,
|
||||||
|
which we will then need to write in |inform7_clib.h|.
|
||||||
|
|
||||||
|
=
|
||||||
|
int CObjectModel::compile_primitive(code_generation *gen, inter_ti bip, inter_tree_node *P) {
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
switch (bip) {
|
||||||
|
case PROPERTYADDRESS_BIP: WRITE("i7_prop_addr("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
||||||
|
case PROPERTYLENGTH_BIP: WRITE("i7_prop_len("); INV_A1; WRITE(", "); INV_A2; WRITE(")"); break;
|
||||||
|
case PROPERTYVALUE_BIP: if (CReferences::am_I_a_ref(gen)) {
|
||||||
|
WRITE("i7_change_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE(", ");
|
||||||
|
} else {
|
||||||
|
WRITE("i7_read_prop_value("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MESSAGE0_BIP: WRITE("i7_call_0(i7_read_prop_value("); INV_A1;
|
||||||
|
WRITE(", "); INV_A2; WRITE("))"); break;
|
||||||
|
case MESSAGE1_BIP: WRITE("i7_call_1(i7_read_prop_value("); INV_A1;
|
||||||
|
WRITE(", "); INV_A2; WRITE("), "); INV_A3; WRITE(")"); break;
|
||||||
|
case MESSAGE2_BIP: WRITE("i7_call_2(i7_read_prop_value("); INV_A1;
|
||||||
|
WRITE(", "); INV_A2; WRITE("), ");
|
||||||
|
INV_A3; WRITE(", "); INV_A4; WRITE(")"); break;
|
||||||
|
case MESSAGE3_BIP: WRITE("i7_call_3(i7_read_prop_value("); INV_A1;
|
||||||
|
WRITE(", "); INV_A2; WRITE("), ");
|
||||||
|
INV_A3; WRITE(", "); INV_A4; WRITE(", "); INV_A5; WRITE(")"); break;
|
||||||
|
case GIVE_BIP: WRITE("i7_give("); INV_A1; WRITE(", "); INV_A2; WRITE(", 1)"); break;
|
||||||
|
case TAKE_BIP: WRITE("i7_give("); INV_A1; WRITE(", "); INV_A2; WRITE(", 0)"); break;
|
||||||
|
default: return NOT_APPLICABLE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
@h Reading and writing properties.
|
@h Reading and writing properties.
|
||||||
So here is the run-time storage for property values, and simple code to read
|
So here is the run-time storage for property values, and simple code to read
|
||||||
and write them. Note that, unlike in the Z-machine or Glulx implementations,
|
and write them. Note that, unlike in the Z-machine or Glulx implementations,
|
||||||
|
@ -371,14 +404,6 @@ typedef struct i7_property_set {
|
||||||
} i7_property_set;
|
} i7_property_set;
|
||||||
i7_property_set i7_properties[i7_max_objects];
|
i7_property_set i7_properties[i7_max_objects];
|
||||||
|
|
||||||
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
|
||||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
|
||||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
|
||||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
|
||||||
owner_id = i7_class_of[owner_id];
|
|
||||||
return i7_properties[(int) owner_id].value[(int) prop_id];
|
|
||||||
}
|
|
||||||
|
|
||||||
void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
||||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) {
|
(prop_id < 0) || (prop_id >= i7_no_property_ids)) {
|
||||||
|
@ -390,17 +415,27 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
||||||
}
|
}
|
||||||
=
|
=
|
||||||
|
|
||||||
@h Other things to do with properties.
|
@ And here sre the functions called by the above primitives:
|
||||||
|
|
||||||
= (text to inform7_clib.h)
|
= (text to inform7_clib.h)
|
||||||
|
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
||||||
|
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||||
|
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
||||||
|
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
||||||
|
owner_id = i7_class_of[owner_id];
|
||||||
|
return i7_properties[(int) owner_id].value[(int) prop_id];
|
||||||
|
}
|
||||||
|
|
||||||
i7val i7_change_prop_value(i7val obj, i7val pr, i7val to, int way) {
|
i7val i7_change_prop_value(i7val obj, i7val pr, i7val to, int way) {
|
||||||
i7val val = i7_read_prop_value(obj, pr), new_val = val;
|
i7val val = i7_read_prop_value(obj, pr), new_val = val;
|
||||||
switch (way) {
|
switch (way) {
|
||||||
case i7_cpv_SET: i7_write_prop_value(obj, pr, to); new_val = to; break;
|
case i7_lvalue_SET: i7_write_prop_value(obj, pr, to); new_val = to; break;
|
||||||
case i7_cpv_PREDEC: new_val = val; i7_write_prop_value(obj, pr, val-1); break;
|
case i7_lvalue_PREDEC: new_val = val; i7_write_prop_value(obj, pr, val-1); break;
|
||||||
case i7_cpv_POSTDEC: new_val = val-1; i7_write_prop_value(obj, pr, new_val); break;
|
case i7_lvalue_POSTDEC: new_val = val-1; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
case i7_cpv_PREINC: new_val = val; i7_write_prop_value(obj, pr, val+1); break;
|
case i7_lvalue_PREINC: new_val = val; i7_write_prop_value(obj, pr, val+1); break;
|
||||||
case i7_cpv_POSTINC: new_val = val+1; i7_write_prop_value(obj, pr, new_val); break;
|
case i7_lvalue_POSTINC: new_val = val+1; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
|
case i7_lvalue_SETBIT: new_val = val | new_val; i7_write_prop_value(obj, pr, new_val); break;
|
||||||
|
case i7_lvalue_CLEARBIT: new_val = val &(~new_val); i7_write_prop_value(obj, pr, new_val); break;
|
||||||
}
|
}
|
||||||
return new_val;
|
return new_val;
|
||||||
}
|
}
|
||||||
|
|
118
inter/final-module/Chapter 5/C References.w
Normal file
118
inter/final-module/Chapter 5/C References.w
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
[CReferences::] C References.
|
||||||
|
|
||||||
|
How changes to storage objects are translated into C.
|
||||||
|
|
||||||
|
@ References identify storage objects which are being written to or otherwise
|
||||||
|
modified, rather than having their current contents read.
|
||||||
|
|
||||||
|
There are seven possible ways to modify something identified by a reference,
|
||||||
|
and we need constants to identify these ways at runtime:
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
#define i7_lvalue_SET 1
|
||||||
|
#define i7_lvalue_PREDEC 2
|
||||||
|
#define i7_lvalue_POSTDEC 3
|
||||||
|
#define i7_lvalue_PREINC 4
|
||||||
|
#define i7_lvalue_POSTINC 5
|
||||||
|
#define i7_lvalue_SETBIT 6
|
||||||
|
#define i7_lvalue_CLEARBIT 7
|
||||||
|
=
|
||||||
|
|
||||||
|
@ Those seven ways correspond to seven Inter primitives, with the following
|
||||||
|
signatures:
|
||||||
|
= (text)
|
||||||
|
primitive !store ref val -> val
|
||||||
|
primitive !preincrement ref -> val
|
||||||
|
primitive !postincrement ref -> val
|
||||||
|
primitive !predecrement ref -> val
|
||||||
|
primitive !postdecrement ref -> val
|
||||||
|
primitive !setbit ref val -> void
|
||||||
|
primitive !clearbit ref val -> void
|
||||||
|
=
|
||||||
|
Since C functions can have their return values freely ignored, we will in fact
|
||||||
|
implement |!setbit| and |!clearbit| as if they too had the signature
|
||||||
|
|ref val -> val|.
|
||||||
|
|
||||||
|
For all these primitives, then, the first operand A1 is a |ref|, and the following
|
||||||
|
function should be used to generate from it:
|
||||||
|
|
||||||
|
=
|
||||||
|
void CReferences::A1_as_ref(code_generation *gen, inter_tree_node *P) {
|
||||||
|
C_GEN_DATA(memdata.next_node_is_a_ref) = TRUE;
|
||||||
|
CodeGen::FC::frame(gen, InterTree::first_child(P));
|
||||||
|
C_GEN_DATA(memdata.next_node_is_a_ref) = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ That sets a temporary mode which is immediately detected and cleared by
|
||||||
|
the generator for whatever A1 actually is. That generator is expected to call
|
||||||
|
this function to detect whether it's a ref. In this mode, A1 is compiled not
|
||||||
|
to a valid C expression to evaluate the contents of A1, but instead to a
|
||||||
|
function call which will modify A1, and which is missing one or two final
|
||||||
|
arguments.
|
||||||
|
|
||||||
|
Note that the mode is auto-exited at once. This is all a bit clumsy, but is
|
||||||
|
correct.
|
||||||
|
|
||||||
|
=
|
||||||
|
int CReferences::am_I_a_ref(code_generation *gen) {
|
||||||
|
int answer = C_GEN_DATA(memdata.next_node_is_a_ref);
|
||||||
|
C_GEN_DATA(memdata.next_node_is_a_ref) = FALSE;
|
||||||
|
return answer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ So, then, here goes:
|
||||||
|
|
||||||
|
=
|
||||||
|
int CReferences::compile_primitive(code_generation *gen, inter_ti bip, inter_tree_node *P) {
|
||||||
|
text_stream *OUT = CodeGen::current(gen);
|
||||||
|
text_stream *store_form = NULL;
|
||||||
|
switch (bip) {
|
||||||
|
case STORE_BIP: store_form = I"i7_lvalue_SET"; break;
|
||||||
|
case PREINCREMENT_BIP: store_form = I"i7_lvalue_PREINC"; break;
|
||||||
|
case POSTINCREMENT_BIP: store_form = I"i7_lvalue_POSTINC"; break;
|
||||||
|
case PREDECREMENT_BIP: store_form = I"i7_lvalue_PREDEC"; break;
|
||||||
|
case POSTDECREMENT_BIP: store_form = I"i7_lvalue_POSTDEC"; break;
|
||||||
|
case SETBIT_BIP: store_form = I"i7_lvalue_SETBIT"; break;
|
||||||
|
case CLEARBIT_BIP: store_form = I"i7_lvalue_CLEARBIT"; break;
|
||||||
|
default: return NOT_APPLICABLE;
|
||||||
|
}
|
||||||
|
if (store_form) @<This does indeed modify a value by reference@>;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ Some storage objects, like variables, can be generated to C code which works
|
||||||
|
in either an lvalue or rvalue context. For example, the Inter variable |frog|
|
||||||
|
generates just as the C variable |i7_mgl_frog|.[1] It's then fine to generate
|
||||||
|
code like either |10 + i7_mgl_frog|, where it is used in a |val| context, or
|
||||||
|
like |i7_mgl_frog++|, where it is used in a |ref| context.
|
||||||
|
|
||||||
|
But other storage objects are not so lucky, and those need to generate to
|
||||||
|
different function calls, one used in a |ref| setting, one used in a |val|.
|
||||||
|
That's what is done by the "A1 as ref" mode set up above.
|
||||||
|
|
||||||
|
[1] In real life, do not mangle frogs. See C. S. Lewis, "Perelandra", 1943.
|
||||||
|
|
||||||
|
@<This does indeed modify a value by reference@> =
|
||||||
|
inter_tree_node *ref = InterTree::first_child(P);
|
||||||
|
if ((CodeGen::CL::node_is_word_array_ref(gen->from, ref)) ||
|
||||||
|
(CodeGen::CL::node_is_property_ref(gen->from, ref))) {
|
||||||
|
@<Handle the ref using the incomplete-function mode@>;
|
||||||
|
} else {
|
||||||
|
@<Handle the ref with C code working either as lvalue or rvalue@>;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Handle the ref using the incomplete-function mode@> =
|
||||||
|
WRITE("("); CReferences::A1_as_ref(gen, P);
|
||||||
|
if (bip == STORE_BIP) { INV_A2; } else { WRITE("0"); }
|
||||||
|
WRITE(", %S))", store_form);
|
||||||
|
|
||||||
|
@<Handle the ref with C code working either as lvalue or rvalue@> =
|
||||||
|
switch (bip) {
|
||||||
|
case PREINCREMENT_BIP: WRITE("++("); INV_A1; WRITE(")"); break;
|
||||||
|
case POSTINCREMENT_BIP: WRITE("("); INV_A1; WRITE(")++"); break;
|
||||||
|
case PREDECREMENT_BIP: WRITE("--("); INV_A1; WRITE(")"); break;
|
||||||
|
case POSTDECREMENT_BIP: WRITE("("); INV_A1; WRITE(")--"); break;
|
||||||
|
case STORE_BIP: WRITE("("); INV_A1; WRITE(" = "); INV_A2; WRITE(")"); break;
|
||||||
|
case SETBIT_BIP: INV_A1; WRITE(" = "); INV_A1; WRITE(" | "); INV_A2; break;
|
||||||
|
case CLEARBIT_BIP: INV_A1; WRITE(" = "); INV_A1; WRITE(" &~ ("); INV_A2; WRITE(")"); break;
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
To generate I6 code from intermediate code.
|
To generate I6 code from intermediate code.
|
||||||
|
|
||||||
@h Target,
|
@h Target.
|
||||||
|
|
||||||
=
|
=
|
||||||
code_generation_target *c_target = NULL;
|
code_generation_target *c_target = NULL;
|
||||||
|
@ -12,6 +12,7 @@ void CTarget::create_target(void) {
|
||||||
METHOD_ADD(c_target, BEGIN_GENERATION_MTID, CTarget::begin_generation);
|
METHOD_ADD(c_target, BEGIN_GENERATION_MTID, CTarget::begin_generation);
|
||||||
METHOD_ADD(c_target, END_GENERATION_MTID, CTarget::end_generation);
|
METHOD_ADD(c_target, END_GENERATION_MTID, CTarget::end_generation);
|
||||||
|
|
||||||
|
CMemoryModel::initialise(c_target);
|
||||||
CObjectModel::initialise(c_target);
|
CObjectModel::initialise(c_target);
|
||||||
|
|
||||||
METHOD_ADD(c_target, GENERAL_SEGMENT_MTID, CTarget::general_segment);
|
METHOD_ADD(c_target, GENERAL_SEGMENT_MTID, CTarget::general_segment);
|
||||||
|
@ -40,13 +41,30 @@ void CTarget::create_target(void) {
|
||||||
METHOD_ADD(c_target, BEGIN_OPCODE_MTID, CTarget::begin_opcode);
|
METHOD_ADD(c_target, BEGIN_OPCODE_MTID, CTarget::begin_opcode);
|
||||||
METHOD_ADD(c_target, SUPPLY_OPERAND_MTID, CTarget::supply_operand);
|
METHOD_ADD(c_target, SUPPLY_OPERAND_MTID, CTarget::supply_operand);
|
||||||
METHOD_ADD(c_target, END_OPCODE_MTID, CTarget::end_opcode);
|
METHOD_ADD(c_target, END_OPCODE_MTID, CTarget::end_opcode);
|
||||||
METHOD_ADD(c_target, BEGIN_ARRAY_MTID, CTarget::begin_array);
|
|
||||||
METHOD_ADD(c_target, ARRAY_ENTRY_MTID, CTarget::array_entry);
|
|
||||||
METHOD_ADD(c_target, END_ARRAY_MTID, CTarget::end_array);
|
|
||||||
METHOD_ADD(c_target, OFFER_PRAGMA_MTID, CTarget::offer_pragma)
|
METHOD_ADD(c_target, OFFER_PRAGMA_MTID, CTarget::offer_pragma)
|
||||||
METHOD_ADD(c_target, NEW_FAKE_ACTION_MTID, CTarget::new_fake_action);
|
METHOD_ADD(c_target, NEW_FAKE_ACTION_MTID, CTarget::new_fake_action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@h Static supporting code.
|
||||||
|
The C code generated here would not compile as a stand-alone file. It needs
|
||||||
|
to use variables and functions from a small unchanging library called
|
||||||
|
|inform7_clib.h|. (The |.h| there is questionable, since this is not purely
|
||||||
|
a header file: it contains actual content and not only predeclarations. On
|
||||||
|
the other hand, it serves the same basic purpose.)
|
||||||
|
|
||||||
|
The code we generate here can only make sense if read alongside |inform7_clib.h|,
|
||||||
|
and vice versa, so the file is presented here in installments. This is the
|
||||||
|
first of those:
|
||||||
|
|
||||||
|
= (text to inform7_clib.h)
|
||||||
|
/* This is a library of C code to support Inform or other Inter programs compiled
|
||||||
|
tp ANSI C. It was generated mechanically from the Inter source code, so to
|
||||||
|
change it, edit that and not this. */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
=
|
||||||
|
|
||||||
@h Segmentation.
|
@h Segmentation.
|
||||||
|
|
||||||
@e c_fundamental_types_I7CGS
|
@e c_fundamental_types_I7CGS
|
||||||
|
@ -119,19 +137,19 @@ int C_target_segments[] = {
|
||||||
typedef struct C_generation_data {
|
typedef struct C_generation_data {
|
||||||
text_stream *double_quoted_C;
|
text_stream *double_quoted_C;
|
||||||
int no_double_quoted_C_strings;
|
int no_double_quoted_C_strings;
|
||||||
int extent_of_i7mem;
|
|
||||||
int C_dword_count;
|
int C_dword_count;
|
||||||
int C_action_count;
|
int C_action_count;
|
||||||
struct dictionary *C_vm_dictionary;
|
struct dictionary *C_vm_dictionary;
|
||||||
|
struct C_generation_memory_model_data memdata;
|
||||||
struct C_generation_object_model_data objdata;
|
struct C_generation_object_model_data objdata;
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} C_generation_data;
|
} C_generation_data;
|
||||||
|
|
||||||
void CTarget::initialise_data(code_generation *gen) {
|
void CTarget::initialise_data(code_generation *gen) {
|
||||||
|
CMemoryModel::initialise_data(gen);
|
||||||
CObjectModel::initialise_data(gen);
|
CObjectModel::initialise_data(gen);
|
||||||
C_GEN_DATA(double_quoted_C) = Str::new();
|
C_GEN_DATA(double_quoted_C) = Str::new();
|
||||||
C_GEN_DATA(no_double_quoted_C_strings) = 0;
|
C_GEN_DATA(no_double_quoted_C_strings) = 0;
|
||||||
C_GEN_DATA(extent_of_i7mem) = 0;
|
|
||||||
C_GEN_DATA(C_dword_count) = 0;
|
C_GEN_DATA(C_dword_count) = 0;
|
||||||
C_GEN_DATA(C_action_count) = 0;
|
C_GEN_DATA(C_action_count) = 0;
|
||||||
C_GEN_DATA(C_vm_dictionary) = Dictionaries::new(1024, TRUE);
|
C_GEN_DATA(C_vm_dictionary) = Dictionaries::new(1024, TRUE);
|
||||||
|
@ -157,7 +175,7 @@ int CTarget::begin_generation(code_generation_target *cgt, code_generation *gen)
|
||||||
WRITE("#include \"inform7_clib.h\"\n");
|
WRITE("#include \"inform7_clib.h\"\n");
|
||||||
CodeGen::deselect(gen, saved);
|
CodeGen::deselect(gen, saved);
|
||||||
|
|
||||||
CTarget::begin_memory(gen);
|
CMemoryModel::begin(gen);
|
||||||
CTarget::begin_functions(gen);
|
CTarget::begin_functions(gen);
|
||||||
CObjectModel::begin(gen);
|
CObjectModel::begin(gen);
|
||||||
CTarget::begin_dictionary_words(gen);
|
CTarget::begin_dictionary_words(gen);
|
||||||
|
@ -166,7 +184,7 @@ int CTarget::begin_generation(code_generation_target *cgt, code_generation *gen)
|
||||||
}
|
}
|
||||||
|
|
||||||
int CTarget::end_generation(code_generation_target *cgt, code_generation *gen) {
|
int CTarget::end_generation(code_generation_target *cgt, code_generation *gen) {
|
||||||
CTarget::end_memory(gen);
|
CMemoryModel::end(gen);
|
||||||
CTarget::end_functions(gen);
|
CTarget::end_functions(gen);
|
||||||
CObjectModel::end(gen);
|
CObjectModel::end(gen);
|
||||||
CTarget::end_dictionary_words(gen);
|
CTarget::end_dictionary_words(gen);
|
||||||
|
|
|
@ -25,5 +25,7 @@ Chapter 4: Inform 6
|
||||||
|
|
||||||
Chapter 5: C
|
Chapter 5: C
|
||||||
Final C
|
Final C
|
||||||
|
C References
|
||||||
|
C Memory Model
|
||||||
C Implementation
|
C Implementation
|
||||||
C Object Model
|
C Object Model
|
||||||
|
|
Loading…
Reference in a new issue