1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 08:34:22 +03:00

Passed ArithmeticOperations test in C

This commit is contained in:
Graham Nelson 2021-08-15 23:41:42 +01:00
parent 3b80fb56e1
commit b9dd4b657d
31 changed files with 1328 additions and 350 deletions

View file

@ -233,16 +233,29 @@ is 20. We instead compile this as
<span class="string-syntax"> } else {</span> <span class="string-syntax"> } else {</span>
<span class="string-syntax"> CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format);</span> <span class="string-syntax"> CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format);</span>
<span class="string-syntax"> if (hang_one) CodeGen::Targets::array_entry(gen, I"</span><span class="constant-syntax">1</span><span class="string-syntax">", format);</span> <span class="string-syntax"> if (hang_one) CodeGen::Targets::array_entry(gen, I"</span><span class="constant-syntax">1</span><span class="string-syntax">", format);</span>
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i&lt;P-&gt;W.extent; i=i+2) {</span> <span class="string-syntax"> int entry_count = 0;</span>
<span class="string-syntax"> if (P-&gt;W.data[i] != DIVIDER_IVAL) {</span> <span class="string-syntax"> for (int i=DATA_CONST_IFLD; i&lt;P-&gt;W.extent; i=i+2)</span>
<span class="string-syntax"> TEMPORARY_TEXT(entry)</span> <span class="string-syntax"> if (P-&gt;W.data[i] != DIVIDER_IVAL)</span>
<span class="string-syntax"> CodeGen::select_temporary(gen, entry);</span> <span class="string-syntax"> entry_count++;</span>
<span class="string-syntax"> </span><span class="comment-syntax"> if ((do_not_bracket == FALSE) &amp;&amp; (P-&gt;W.data[i] != DIVIDER_IVAL)) WRITE("(");</span> <span class="string-syntax"> if (hang_one) entry_count++;</span>
<span class="string-syntax"> CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P-&gt;W.data[i], P-&gt;W.data[i+1], unsub);</span> <span class="string-syntax"> inter_ti e = 0; int ips = FALSE;</span>
<span class="string-syntax"> </span><span class="comment-syntax"> if ((do_not_bracket == FALSE) &amp;&amp; (P-&gt;W.data[i] != DIVIDER_IVAL)) WRITE(")");</span> <span class="string-syntax"> if ((entry_count == 1) &amp;&amp; (Inter::Symbols::read_annotation(con_name, ASSIMILATED_IANN) &gt;= 0)) {</span>
<span class="string-syntax"> CodeGen::deselect_temporary(gen);</span> <span class="string-syntax"> inter_ti val1 = P-&gt;W.data[DATA_CONST_IFLD], val2 = P-&gt;W.data[DATA_CONST_IFLD+1];</span>
<span class="string-syntax"> CodeGen::Targets::array_entry(gen, entry, format);</span> <span class="string-syntax"> e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(P), val1, val2, &amp;ips);</span>
<span class="string-syntax"> DISCARD_TEXT(entry)</span> <span class="string-syntax"> }</span>
<span class="string-syntax"> if (e &gt; 1) {</span>
<span class="string-syntax"> LOG("</span><span class="identifier-syntax">Entry</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> %</span><span class="identifier-syntax">S</span><span class="plain-syntax"> </span><span class="identifier-syntax">masks</span><span class="plain-syntax"> %</span><span class="identifier-syntax">d</span><span class="plain-syntax"> </span><span class="identifier-syntax">blanks</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", CodeGen::CL::name(con_name), e);</span>
<span class="string-syntax"> CodeGen::Targets::array_entries(gen, (int) e, ips, format);</span>
<span class="string-syntax"> } else {</span>
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i&lt;P-&gt;W.extent; i=i+2) {</span>
<span class="string-syntax"> if (P-&gt;W.data[i] != DIVIDER_IVAL) {</span>
<span class="string-syntax"> TEMPORARY_TEXT(entry)</span>
<span class="string-syntax"> CodeGen::select_temporary(gen, entry);</span>
<span class="string-syntax"> CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P-&gt;W.data[i], P-&gt;W.data[i+1], unsub);</span>
<span class="string-syntax"> CodeGen::deselect_temporary(gen);</span>
<span class="string-syntax"> CodeGen::Targets::array_entry(gen, entry, format);</span>
<span class="string-syntax"> DISCARD_TEXT(entry)</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> }</span> <span class="string-syntax"> }</span>
<span class="string-syntax"> }</span> <span class="string-syntax"> }</span>
<span class="string-syntax"> CodeGen::Targets::end_array(gen, format);</span> <span class="string-syntax"> CodeGen::Targets::end_array(gen, format);</span>
@ -396,6 +409,47 @@ is 20. We instead compile this as
<span class="string-syntax"> printing_mode = FALSE;</span> <span class="string-syntax"> printing_mode = FALSE;</span>
<span class="string-syntax">}</span> <span class="string-syntax">}</span>
<span class="string-syntax">inter_ti CodeGen::CL::evaluate(code_generation *gen, inter_symbols_table *T, inter_ti val1, inter_ti val2, int *ips) {</span>
<span class="string-syntax"> if (val1 == LITERAL_IVAL) return val2;</span>
<span class="string-syntax"> if (Inter::Symbols::is_stored_in_data(val1, val2)) {</span>
<span class="string-syntax"> inter_symbol *aliased = InterSymbolsTables::symbol_from_data_pair_and_table(val1, val2, T);</span>
<span class="string-syntax"> if (aliased == NULL) internal_error("</span><span class="identifier-syntax">bad</span><span class="plain-syntax"> </span><span class="identifier-syntax">aliased</span><span class="plain-syntax"> </span><span class="identifier-syntax">symbol</span><span class="string-syntax">");</span>
<span class="string-syntax"> inter_tree_node *D = aliased-&gt;definition;</span>
<span class="string-syntax"> if (D == NULL) internal_error("</span><span class="identifier-syntax">undefined</span><span class="plain-syntax"> </span><span class="identifier-syntax">symbol</span><span class="string-syntax">");</span>
<span class="string-syntax"> switch (D-&gt;W.data[FORMAT_CONST_IFLD]) {</span>
<span class="string-syntax"> case CONSTANT_DIRECT: {</span>
<span class="string-syntax"> inter_ti dval1 = D-&gt;W.data[DATA_CONST_IFLD];</span>
<span class="string-syntax"> inter_ti dval2 = D-&gt;W.data[DATA_CONST_IFLD + 1];</span>
<span class="string-syntax"> inter_ti e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), dval1, dval2, ips);</span>
<span class="string-syntax"> if (e == 0) {</span>
<span class="string-syntax"> text_stream *S = CodeGen::CL::name(aliased);</span>
<span class="string-syntax"> if (Str::eq(S, I"</span><span class="identifier-syntax">INDIV_PROP_START</span><span class="string-syntax">")) *ips = TRUE;</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> LOG("</span><span class="identifier-syntax">Eval</span><span class="plain-syntax"> </span><span class="reserved-syntax">const</span><span class="plain-syntax"> $3 = %</span><span class="identifier-syntax">d</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", aliased, e);</span>
<span class="string-syntax"> return e;</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> case CONSTANT_SUM_LIST:</span>
<span class="string-syntax"> case CONSTANT_PRODUCT_LIST:</span>
<span class="string-syntax"> case CONSTANT_DIFFERENCE_LIST:</span>
<span class="string-syntax"> case CONSTANT_QUOTIENT_LIST: {</span>
<span class="string-syntax"> inter_ti result = 0;</span>
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i&lt;D-&gt;W.extent; i=i+2) {</span>
<span class="string-syntax"> inter_ti extra = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), D-&gt;W.data[i], D-&gt;W.data[i+1], ips);</span>
<span class="string-syntax"> if (i == DATA_CONST_IFLD) result = extra;</span>
<span class="string-syntax"> else {</span>
<span class="string-syntax"> if (D-&gt;W.data[FORMAT_CONST_IFLD] == CONSTANT_SUM_LIST) result = result + extra;</span>
<span class="string-syntax"> if (D-&gt;W.data[FORMAT_CONST_IFLD] == CONSTANT_PRODUCT_LIST) result = result * extra;</span>
<span class="string-syntax"> if (D-&gt;W.data[FORMAT_CONST_IFLD] == CONSTANT_DIFFERENCE_LIST) result = result - extra;</span>
<span class="string-syntax"> if (D-&gt;W.data[FORMAT_CONST_IFLD] == CONSTANT_QUOTIENT_LIST) result = result / extra;</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> return result;</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> }</span>
<span class="string-syntax"> return 0;</span>
<span class="string-syntax">}</span>
<span class="string-syntax">void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) {</span> <span class="string-syntax">void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) {</span>
<span class="string-syntax"> inter_tree *I = gen-&gt;from;</span> <span class="string-syntax"> inter_tree *I = gen-&gt;from;</span>
<span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span> <span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span>
@ -461,11 +515,11 @@ is 20. We instead compile this as
<span class="string-syntax"> return symb-&gt;symbol_name;</span> <span class="string-syntax"> return symb-&gt;symbol_name;</span>
<span class="string-syntax">}</span> <span class="string-syntax">}</span>
</pre> </pre>
<ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">&#167;1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">&#167;8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">&#167;8</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5_5">&#167;5.5</a>, <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_4">&#167;5.8.4</a>, <a href="2-iap.html#SP5_9">&#167;5.9</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2">&#167;5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>), C Object Model (<a href="5-com.html#SP6">&#167;6</a>), C Function Model (<a href="5-cfm.html#SP1">&#167;1</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul> <ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">&#167;1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">&#167;8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">&#167;3</a>).</li><li>The function CodeGen::CL::evaluate appears nowhere else.</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">&#167;8</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">&#167;2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">&#167;4.5</a>, <a href="2-iap.html#SP4_6">&#167;4.6</a>, <a href="2-iap.html#SP5_5">&#167;5.5</a>, <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_4">&#167;5.8.4</a>, <a href="2-iap.html#SP5_9">&#167;5.9</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2">&#167;5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a>, <a href="2-iap.html#SP6">&#167;6</a>, <a href="2-iap.html#SP8">&#167;8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">&#167;7</a>, <a href="4-fi6.html#SP8">&#167;8</a>), C Object Model (<a href="5-com.html#SP6">&#167;6</a>), C Function Model (<a href="5-cfm.html#SP1">&#167;1</a>), C Global Variables (<a href="5-cgv.html#SP2">&#167;2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p> <p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP10">&#167;10</a><br/>C Object Model - <a href="5-com.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP11">&#167;11</a><br/>C Object Model - <a href="5-com.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reffed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reffed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">REFERENCE_IST</span><span class="plain-syntax">) {</span> <span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">REFERENCE_IST</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>

View file

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

View file

@ -401,6 +401,7 @@ function togglePopup(material_id) {
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">BEGIN_ARRAY_MTID</span> <pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">BEGIN_ARRAY_MTID</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ARRAY_ENTRY_MTID</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">ARRAY_ENTRY_MTID</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ARRAY_ENTRIES_MTID</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">END_ARRAY_MTID</span> <span class="definition-keyword">enum</span> <span class="constant-syntax">END_ARRAY_MTID</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span> <span class="definition-keyword">define</span> <span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">BYTE_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span> <span class="definition-keyword">define</span> <span class="constant-syntax">BYTE_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
@ -410,6 +411,7 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">format</span><span class="plain-syntax">)</span> <span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">format</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">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="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">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="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::begin_array</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::begin_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_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">CodeGen::Targets::begin_array</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::begin_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
@ -417,13 +419,16 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::array_entry</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::array_entry</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP5_11_1">&#167;5.11.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">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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::array_entry</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::array_entry</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_8_5_1_1">&#167;5.8.5.1.1</a>, <a href="2-iap.html#SP5_11_1">&#167;5.11.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">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="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</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::Targets::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangled_array_entry</span></span>:<br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::array_entries</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::array_entries</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="identifier-syntax">plus_ips</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangled_array_entry</span></span>:<br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a>, <a href="2-iap.html#SP5_11_2_1">&#167;5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">&#167;5.11.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">mangled</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">mangled</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-ft.html#SP5" class="function-link"><span class="function-syntax">CodeGen::Targets::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="2-ft.html#SP5" class="function-link"><span class="function-syntax">CodeGen::Targets::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</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">mangled</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">mangled</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::Targets::end_array</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::end_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::end_array</span><button class="popup" onclick="togglePopup('usagePopup44')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup44">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::end_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">&#167;5.7</a>, <a href="2-iap.html#SP5_8_3">&#167;5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">&#167;5.8.5.1</a>, <a href="2-iap.html#SP5_11">&#167;5.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
</pre> </pre>
@ -433,7 +438,7 @@ function togglePopup(material_id) {
</pre> </pre>
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup44')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup44">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::new_fake_action</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup45')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup45">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::new_fake_action</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</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>
</pre> </pre>

View file

@ -177,10 +177,11 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::end_array</span></a><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::array_entries</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::end_array</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::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">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::new_fake_action</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inform6_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">inform6_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="plain-syntax">}</span>
@ -943,13 +944,25 @@ trick called "stubbing", these being "stub definitions".)
<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">" (%S)"</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (%S)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Alternatively, we can just specify how many entries there will be: they will
then be initialised to 0.
</p>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::end_array</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::end_array</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span> <pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::array_entries</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::array_entries</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="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">plus_ips</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (%d + INDIV_PROP_START)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="identifier-syntax">plus_ips</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">" (%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</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::I6::end_array</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::end_array</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">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">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="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::new_fake_action</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::new_fake_action</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="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="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">"Fake_Action %S;\n"</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Fake_Action %S;\n"</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>

View file

@ -85,9 +85,19 @@ easy.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLUS_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">PLUS_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">MINUS_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">MINUS_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">UNARYMINUS_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">UNARYMINUS_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">TIMES_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">TIMES_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">DIVIDE_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">DIVIDE_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::inside_function</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MODULO_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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"glulx_div_r("</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">"("</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><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">MODULO_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::inside_function</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">"glulx_mod_r("</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">"("</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">BITWISEAND_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">")&amp;("</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">BITWISEAND_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">")&amp;("</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">BITWISEOR_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">BITWISEOR_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">BITWISENOT_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">BITWISENOT_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>
@ -131,105 +141,277 @@ storing <span class="extract"><span class="Extracts-extract-syntax">float</span>
</p> </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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_exp</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_add</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_exp</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fadd</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fadd</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fdiv</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_neg</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_fdiv</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">if</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">y</span><span class="Extracts-plain-syntax"> = -</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</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_floor</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_mul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_floor</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fmod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">w</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_div</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fmod</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</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">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Division</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">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">by</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">n</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">return</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">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Since</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">doesn</span><span class="Extracts-plain-syntax">'</span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">guarantee</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">results</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">division</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">negative</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">numbers</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">we</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">carefully</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">convert</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">everything</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">positive</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">values</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">first</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">They</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">have</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">be</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">values</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">too</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">otherwise</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</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">goes</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wonky</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">x</span><span class="Extracts-plain-syntax"> &lt; </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">ax</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">x</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">y</span><span class="Extracts-plain-syntax"> &lt; </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">ay</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">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</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">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</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">y</span><span class="Extracts-plain-syntax"> &lt; </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">ay</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">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</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">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</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_fmul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div_r</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_fmul</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div</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">y</span><span class="Extracts-plain-syntax">, &amp;</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fsub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fsub</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</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">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Division</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">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">by</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">n</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">return</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">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ay</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">y</span><span class="Extracts-plain-syntax"> &lt; </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">ay</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">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> &lt; </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">ax</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> % </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> % </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</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_ftonumn</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod_r</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_ftonumn</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</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">y</span><span class="Extracts-plain-syntax">, &amp;</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumz</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">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">gfloat32</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_ftonumz</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">gfloat32</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">res</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> *(</span><span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> *)(&amp;</span><span class="Extracts-identifier-syntax">res</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">decode_float</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">gfloat32</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</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"> *)(&amp;</span><span class="Extracts-identifier-syntax">res</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</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_exp</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">expf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</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_fadd</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fdiv</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_floor</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">floorf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</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_fmod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</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">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fquot</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fmodf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">fy</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">quot</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fquot</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">rem</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">((</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">-</span><span class="Extracts-identifier-syntax">fquot</span><span class="Extracts-plain-syntax">) / </span><span class="Extracts-identifier-syntax">fy</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">rem</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">rem</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">When</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">quotient</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">zero</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">sign</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">has</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">been</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">lost</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">in</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">shuffle</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">We</span><span class="Extracts-plain-syntax">'</span><span class="Extracts-identifier-syntax">ll</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">set</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">by</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">hand</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">based</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">on</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">original</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">arguments</span><span class="Extracts-plain-syntax">. */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rem</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">y</span><span class="Extracts-plain-syntax">) &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">quot</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">w</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rem</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_fmul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fsub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumn</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">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</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">result</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">signbit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</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">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">2147483647</span><span class="Extracts-plain-syntax">.0))</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7FFFFFFF</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">roundf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &lt; -2147483647.0))</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">roundf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> }</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">result</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_ftonumz</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">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</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">result</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">signbit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</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">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">2147483647</span><span class="Extracts-plain-syntax">.0))</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7FFFFFFF</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">truncf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &lt; -2147483647.0))</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">truncf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> }</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">result</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_numtof</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">((</span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</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">glulx_jfeq</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfeq</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jfeq</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> &amp;&amp; (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x007FFFFF</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">The</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">delta</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">NaN</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">can</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">match</span><span class="Extracts-plain-syntax">. */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">else</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">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> &amp;&amp; (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Both</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">Opposite</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinities</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">equal</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">even</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">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">difference</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">infinite</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">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">easy</span><span class="Extracts-plain-syntax">. */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">y</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fabs</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> &amp;&amp; </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &gt;= -</span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">result</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">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfne</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> &amp;&amp; (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x007FFFFF</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">The</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">delta</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">NaN</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">can</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">match</span><span class="Extracts-plain-syntax">. */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">else</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">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> &amp;&amp; (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Both</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">Opposite</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinities</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">equal</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">even</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">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">difference</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">infinite</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">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">easy</span><span class="Extracts-plain-syntax">. */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">y</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fabs</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> &amp;&amp; </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> &gt;= -</span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">result</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">1</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">glulx_jfge</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfge</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_jfge</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isgreaterequal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jflt</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jflt</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_jflt</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isless</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisinf</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisinf</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-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_jisinf</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisnan</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisnan</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-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_jisnan</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_log</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_log</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_log</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">logf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_acos</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_acos</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_acos</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">acosf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_asin</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_asin</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_asin</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">asinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_atan</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_atan</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_atan</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">atanf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_ceil</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_ceil</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_ceil</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">ceilf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_cos</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_cos</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_cos</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">cosf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_pow</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_pow</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_pow</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) == -0.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">))</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) == -1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">) &amp;&amp; </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">powf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sin</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_sin</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_sin</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">sinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_sqrt</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_sqrt</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_sqrt</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">sqrtf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</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_tan</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_tan</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_tan</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">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">tanf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
<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>

View file

@ -87,14 +87,17 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand_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">operand_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">operand_branches</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">operand_branches</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">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">operand_label</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">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">operand_label</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">pointer_on_operand</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">pointer_on_operand</span><span class="plain-syntax">[16];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushed_result</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_assembly_data</span><span class="plain-syntax">;</span> <span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_assembly_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::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">CAssembly::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">&#167;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">CAssembly::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">CAssembly::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">&#167;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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = -1;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;16; </span><span class="identifier-syntax">i</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pushed_result</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</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">CAssembly::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">CAssembly::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">&#167;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">CAssembly::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">CAssembly::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">&#167;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>
@ -109,14 +112,18 @@ function togglePopup(material_id) {
<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_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_ASM_STACK_CAPACITY</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">128</span>
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_ASM_STACK_CAPACITY</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_asm_stack_pointer</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_pull</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_pull</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">i7_pull</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</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">Stack</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">underflow</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[--</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax">];</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_push</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</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">i7_push</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_ASM_STACK_CAPACITY</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">Stack</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">overflow</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax">; }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax">++] = </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<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>
@ -126,6 +133,7 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::begin_opcode</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">CAssembly::begin_opcode</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">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">CAssembly::begin_opcode</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">CAssembly::begin_opcode</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pushed_result</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'j'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_branches</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">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'j'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_branches</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">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">"@return"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"return "</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">"@return"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"return "</span><span class="plain-syntax">);</span>
@ -134,23 +142,44 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle_opcode</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">opcode</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle_opcode</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">opcode</span><span class="plain-syntax">);</span>
<span class="plain-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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"("</span><span class="plain-syntax">); </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = -1;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;16; </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">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">"@acos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">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">"@aload"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@acos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@aloadb"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@add"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@aloads"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@aload"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@asin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@aloadb"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@atan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@aloads"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@binarysearch"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">8</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">"@asin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@ceil"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@atan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@cos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@binarysearch"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[8]) = </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">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">"@gestalt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@ceil"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@glk"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@cos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@pow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@div"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@shiftl"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">"@exp"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@sin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@fadd"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@sqrt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@fdiv"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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">"@floor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@fmod"</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[4]) = </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">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">"@fmul"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@fsub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@ftonumn"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@ftonumz"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@gestalt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@glk"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@log"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@mod"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@mul"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@neg"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@numtof"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@pow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@shiftl"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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">"@sin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@sqrt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">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">"@sub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[3]) = </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">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[2]) = </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">CAssembly::supply_operand</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">CAssembly::supply_operand</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_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">CAssembly::supply_operand</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">CAssembly::supply_operand</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_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>
@ -158,17 +187,19 @@ 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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">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="reserved-syntax">else</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">)++ &gt; </span><span class="constant-syntax">0</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">)++ &gt; </span><span class="constant-syntax">0</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">) == </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</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">write_to</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">write_to</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">write_to</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">write_to</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><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-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><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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</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">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_mgl_sp"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;%S"</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pushed_result</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">else</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">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</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">"&amp;%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</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">"&amp;%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</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">write_to</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">else</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="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">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_mgl_sp"</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="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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</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">write_to</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">CAssembly::end_opcode</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">CAssembly::end_opcode</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::end_opcode</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">CAssembly::end_opcode</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
@ -180,6 +211,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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no branch 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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no branch label"</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pushed_result</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"; i7_push(i7_mgl_sp)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p> <p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
@ -201,10 +233,6 @@ function togglePopup(material_id) {
<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_copy</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_copy</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_div</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_gestalt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_gestalt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span> <span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</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-plain-syntax">}</span>
@ -238,7 +266,7 @@ function togglePopup(material_id) {
<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">glulx_jeq</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jeq</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_jeq</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">if</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">y</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">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
@ -248,12 +276,12 @@ function togglePopup(material_id) {
<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">glulx_jnz</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jnz</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-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_jnz</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jz</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">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jz</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-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_jz</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>
@ -269,17 +297,6 @@ function togglePopup(material_id) {
<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_mfree</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_mfree</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_mod</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_neg</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_neg</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_numtof</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_numtof</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_quit</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_quit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">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_quit</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_quit</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
@ -293,12 +310,14 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax"> // </span><span class="Extracts-identifier-syntax">Deliberately</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ignored</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">we</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">using</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout</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">glk</span> <span class="Extracts-plain-syntax"> // </span><span class="Extracts-identifier-syntax">Deliberately</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ignored</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">we</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">using</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout</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">glk</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_print_char</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamchar</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamchar</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</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">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</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_print_decimal</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamnum</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamnum</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-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_streamnum</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</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_streamstr</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamstr</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>
@ -306,11 +325,7 @@ function togglePopup(material_id) {
<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_streamunichar</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamunichar</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</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">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</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_sub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_sub</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-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ushiftr</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span> <span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ushiftr</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>

View file

@ -92,12 +92,14 @@ function togglePopup(material_id) {
<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">prototype</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</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">argument_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">argument_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="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_fcf</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">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_fcf</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">compiling_function</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_function_model_data</span><span class="plain-syntax">;</span> <span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_function_model_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::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">CFunctionModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">&#167;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">CFunctionModel::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">CFunctionModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">&#167;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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">prototype</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">prototype</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">argument_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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">argument_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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</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_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</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">CFunctionModel::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">CFunctionModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">&#167;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">CFunctionModel::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">CFunctionModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">&#167;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>
@ -137,6 +139,43 @@ function togglePopup(material_id) {
<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="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="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="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><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_fundamental_types_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">"i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message);\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_stubs_at_eof_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">"i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {\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">"switch (fn_ref) {\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="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fcf</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">fcf</span><span class="plain-syntax">, </span><span class="reserved-syntax">final_c_function</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">"case "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier_as_constant</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">": return fn_"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">identifier_as_constant</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">fcf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">uses_vararg_model</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">"2, argc, (i7varargs) { "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;10; </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">i</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</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">"args[%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-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">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="function-syntax">&lt;fcf-&gt;</span><span class="identifier-syntax">max_arity</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</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">", 0"</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">"argc"</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="function-syntax">&lt;fcf-&gt;</span><span class="identifier-syntax">max_arity</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">", args[%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-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">");\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</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">"printf(\"function not found\\n\");\n"</span><span class="plain-syntax">);</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><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">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">final_c_function</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">final_c_function</span><span class="plain-syntax"> {</span>
@ -165,6 +204,7 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::make_veneer_fcf</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">unmangled_name</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::make_veneer_fcf</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">unmangled_name</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><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::new_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">unmangled_name</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><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::new_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">unmangled_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">max_arity</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::declare_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::declare_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>
@ -196,6 +236,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">"printf(\"called %S\\n\");\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">identifier_as_constant</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">"printf(\"called %S\\n\");\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">identifier_as_constant</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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</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">CFunctionModel::place_label</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">CFunctionModel::place_label</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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>
@ -222,9 +263,15 @@ function togglePopup(material_id) {
<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">"return 1;\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">"return 1;\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}\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}\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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::inside_function</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">CFunctionModel::inside_function</span></span>:<br/>C Arithmetic - <a href="5-car.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</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">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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::begin_function_call</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">CFunctionModel::begin_function_call</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">-&gt;</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">-&gt;</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">) &amp;&amp; (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_IST</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">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">) &amp;&amp; (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_IST</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">FORMAT_CONST_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_DIRECT</span><span class="plain-syntax">)) {</span>
@ -323,11 +370,6 @@ function togglePopup(material_id) {
<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_gen_call</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">fn_ref</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">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">argc</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">call_message</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">i7_gen_call</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">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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_call_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">fn_ref</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_call_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">fn_ref</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-identifier-syntax">for</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">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;10; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[10]; </span><span class="Extracts-identifier-syntax">for</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">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;10; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_gen_call</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fn_ref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span> <span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_gen_call</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fn_ref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>

View file

@ -139,7 +139,7 @@ function togglePopup(material_id) {
<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-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-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-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-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><a href="5-cmm.html#SP10" 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>

View file

@ -110,7 +110,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNAME_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_name("</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">PRINTNAME_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_name("</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">PRINTOBJ_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_object("</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">PRINTOBJ_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_object("</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">PRINTPROPERTY_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_property("</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">PRINTPROPERTY_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_property("</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">PRINTNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%d\", (int) "</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">PRINTNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_decimal("</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">PRINTNLNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_number("</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">PRINTNLNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_number("</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">PRINTDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_def_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">PRINTDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_def_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">PRINTCDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_cdef_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">PRINTCDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_cdef_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>
@ -138,6 +138,10 @@ function togglePopup(material_id) {
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_font</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">what</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_font</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">what</span><span class="Extracts-plain-syntax">) {</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_print_decimal</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("%</span><span class="Extracts-identifier-syntax">d</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">x</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_print_char</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</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-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</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">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</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">c</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">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span> <span class="Extracts-plain-syntax">}</span>

View file

@ -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 Memory 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 Memory Model</b></li></ul></div>
<p class="purpose">How arrays of all kinds are stored in C.</p> <p class="purpose">How arrays of all kinds are stored in C.</p>
<ul class="toc"><li><a href="5-cmm.html#SP1">&#167;1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">&#167;2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">&#167;5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP7">&#167;7. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP10">&#167;10. Primitives for byte and word lookup</a></li></ul><hr class="tocbar"> <ul class="toc"><li><a href="5-cmm.html#SP1">&#167;1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">&#167;2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">&#167;5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP7">&#167;7. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP11">&#167;11. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Setting up the model. </b></p> <p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Setting up the model. </b></p>
@ -82,7 +82,8 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::initialise</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::initialise</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::initialise</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::initialise</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#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">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">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="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entries</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">);</span>
<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="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>
@ -282,7 +283,7 @@ predefine when the array ends.
</p> </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">CMemoryModel::array_entry</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a>, <a href="5-cmm.html#SP7_3">&#167;7.3</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::array_entry</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a>, <a href="5-cmm.html#SP7_3">&#167;7.3</a>, <a href="5-cmm.html#SP9">&#167;9</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span> <span class="plain-syntax"> </span><span class="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="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">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>
@ -298,7 +299,7 @@ predefine when the array ends.
</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">" (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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (i7byte) %S, /* %d */\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span> <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> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul>
@ -312,17 +313,28 @@ and therefore if <span class="extract"><span class="extract-syntax">X</span></sp
</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">" 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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S), /* %d */\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">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span> <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> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>When all the entries have been placed, the following is called. It does nothing <p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Alternatively, we can just specify how many entries there will be: they will
then be initialised to 0.
</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_entries</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::array_entries</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">) </span><span class="identifier-syntax">how_many</span><span class="plain-syntax"> += </span><span class="constant-syntax">64</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">how_many</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="5-cmm.html#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="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </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. except to predeclare the extent constant, if one was used.
</p> </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">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">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::end_array</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::end_array</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="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">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="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>
@ -332,7 +344,7 @@ except to predeclare the extent constant, if one was used.
<span class="plain-syntax"> }</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>&#167;10. Primitives for byte and word lookup. </b>The signatures here are: <p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Primitives for byte and word lookup. </b>The signatures here are:
</p> </p>
<pre class="displayed-code all-displayed-code code-font"> <pre class="displayed-code all-displayed-code code-font">
@ -340,44 +352,44 @@ except to predeclare the extent constant, if one was used.
<span class="plain-syntax">primitive !lookupbyte val val -&gt; val</span> <span class="plain-syntax">primitive !lookupbyte val val -&gt; val</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::handle_store_by_ref</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::handle_store_by_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">&#167;4.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">ref</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::handle_store_by_ref</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">CMemoryModel::handle_store_by_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">&#167;4.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">ref</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cal.html#SP3" class="function-link"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</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="identifier-syntax">LOOKUP_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><a href="2-cal.html#SP3" class="function-link"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</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="identifier-syntax">LOOKUP_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">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">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="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_primitive</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">CMemoryModel::compile_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_primitive</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">CMemoryModel::compile_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span> <span class="plain-syntax"> </span><span class="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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">10.2</span></a></span> <span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">11.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#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="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="reserved-syntax">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_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</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="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#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">11.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="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="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">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="plain-syntax">}</span>
</pre> </pre>
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span> <p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>&#167;11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">11.1</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">"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> <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> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">&#167;10</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span> <p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>&#167;11.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">11.2</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">"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> <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> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">&#167;10</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>&#167;10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span> <p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>&#167;11.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">11.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">
<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> <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> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">&#167;10</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">&#167;11</a>.</li></ul>
<nav role="progress"><div class="progresscontainer"> <nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progressnext"><a href="5-cas.html">&#10095;</a></li></ul></div> <ul class="progressbar"><li class="progressprev"><a href="5-crf.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progressnext"><a href="5-cas.html">&#10095;</a></li></ul></div>
</nav><!--End of weave--> </nav><!--End of weave-->

View file

@ -206,14 +206,14 @@ overlap.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_max_objects %d\n"</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">1</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_max_objects %d\n"</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">1</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 i7_metaclass_of[] = { 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">"i7val i7_metaclass_of[] = { 0"</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">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</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="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">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=</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="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">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</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">is_class</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", i7_mgl_Class"</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">owners</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">is_class</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", i7_mgl_Class"</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_Object"</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_Object"</span><span class="plain-syntax">);</span>
<span class="plain-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">" };\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7val i7_class_of[] = { 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">"i7val i7_class_of[] = { 0"</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">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</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="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">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=</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="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">", "</span><span class="plain-syntax">); </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">class</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><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">class</span><span class="plain-syntax">);</span>
<span class="plain-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">" };\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>
@ -345,17 +345,18 @@ only need to be unique, so the order is not significant.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::declare_property_by_name</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">CObjectModel::declare_property_by_name</span></span>:<br/><a href="5-com.html#SP1">&#167;1</a>, <a href="5-com.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">used</span><span class="plain-syntax">) {</span> <span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::declare_property_by_name</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">CObjectModel::declare_property_by_name</span></span>:<br/><a href="5-com.html#SP1">&#167;1</a>, <a href="5-com.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">used</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">used</span><span class="plain-syntax">) {</span> <span class="comment-syntax"> if (used) {</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 "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %d\n"</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="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %d\n"</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="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span> <span class="comment-syntax"> } else {</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>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n#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">"\n#define "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" 0\n#endif\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">" 0\n#endif\n"</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><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>
@ -413,6 +414,11 @@ By fiat, that will be 0.
<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">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">"}\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><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_fundamental_types_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">"i7val fn_i7_mgl_CreatePropertyOffsets(int argc);\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>
</pre> </pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-com.html#SP1">&#167;1</a>.</li></ul> <ul class="endnotetexts"><li>This code is used in <a href="5-com.html#SP1">&#167;1</a>.</li></ul>
@ -542,8 +548,9 @@ property values are not stored in the memory map.
<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-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"> &lt;= </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"> &gt;= </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"> &lt;= </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"> &gt;= </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"> &lt; </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"> &gt;= </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">prop_id</span><span class="Extracts-plain-syntax"> &lt; </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"> &gt;= </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">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">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-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">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-plain-syntax">}</span>

View file

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

View file

@ -139,7 +139,7 @@ correct.
</p> </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">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">&#167;10</a><br/>C Object Model - <a href="5-com.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span> <span class="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#SP11">&#167;11</a><br/>C Object Model - <a href="5-com.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="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="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="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><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax">;</span>
@ -185,7 +185,7 @@ That's what is done by the "A1 as ref" mode set up above.
<pre class="displayed-code all-displayed-code code-font"> <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="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span> <span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP11" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><a href="5-com.html#SP10" class="function-link"><span class="function-syntax">CObjectModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">))) {</span> <span class="plain-syntax"> (</span><a href="5-com.html#SP10" class="function-link"><span class="function-syntax">CObjectModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-crf.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Handle the ref using the incomplete-function mode</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span> <span class="plain-syntax"> </span><span class="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="reserved-syntax">else</span><span class="plain-syntax"> {</span>

View file

@ -123,6 +123,7 @@ first of those:
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax">&lt;stdlib.h&gt;</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">&lt;stdlib.h&gt;</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">&lt;stdio.h&gt;</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">&lt;stdio.h&gt;</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">&lt;math.h&gt;</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="SP3" class="paragraph-anchor"></a><b>&#167;3. Segmentation. </b></p> <p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Segmentation. </b></p>

View file

@ -130,7 +130,6 @@ like variables. That's what makes them intermediate.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">kc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">explicit_identifier</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">kc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">explicit_identifier</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">invented</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">invented</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">invented</span><span class="plain-syntax">, </span><span class="string-syntax">"WEAK_ID_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</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">invented</span><span class="plain-syntax">, </span><span class="string-syntax">"WEAK_ID_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
<span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"I did make %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">invented</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">invented</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">invented</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span> <span class="plain-syntax">}</span>

View file

@ -1,6 +1,6 @@
Total memory consumption was 399122K = 390 MB Total memory consumption was 398325K = 389 MB
60.3% was used for 1996022 objects, in 371151 frames in 301 x 800K = 240800K = 235 MB: 60.2% was used for 1996024 objects, in 371153 frames in 300 x 800K = 240000K = 234 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 5133 x 100 = 513300 objects, 28909056 bytes 7.0% text_stream_array 5133 x 100 = 513300 objects, 28909056 bytes
@ -96,7 +96,7 @@ Total memory consumption was 399122K = 390 MB
---- nonlocal_variable 93 objects, 20088 bytes ---- nonlocal_variable 93 objects, 20088 bytes
---- property 146 objects, 19856 bytes ---- property 146 objects, 19856 bytes
---- timed_rules_rfd_data 400 objects, 19200 bytes ---- timed_rules_rfd_data 400 objects, 19200 bytes
---- method 390 objects, 18720 bytes ---- method 392 objects, 18816 bytes
---- pcalc_prop_deferral 86 objects, 17888 bytes ---- pcalc_prop_deferral 86 objects, 17888 bytes
---- instance 167 objects, 17368 bytes ---- instance 167 objects, 17368 bytes
---- parse_node_tree 20 objects, 17280 bytes ---- parse_node_tree 20 objects, 17280 bytes
@ -236,9 +236,9 @@ Total memory consumption was 399122K = 390 MB
---- loop_over_scope 1 object, 40 bytes ---- loop_over_scope 1 object, 40 bytes
---- I6_generation_data 1 object, 24 bytes ---- I6_generation_data 1 object, 24 bytes
39.6% was used for memory not allocated for objects: 39.7% was used for memory not allocated for objects:
21.1% text stream storage 86271368 bytes in 531005 claims 21.1% text stream storage 86274752 bytes in 531041 claims
4.4% dictionary storage 18157056 bytes in 33232 claims 4.4% dictionary storage 18157056 bytes in 33232 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 399122K = 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 - 76729480 bytes = 74931K = 73 MB 18.6% was overhead - 75910184 bytes = 74131K = 72 MB

View file

@ -1,6 +1,6 @@
100.0% in inform7 run 100.0% in inform7 run
55.3% in compilation to Inter 55.4% in compilation to Inter
40.1% in //Sequence::undertake_queued_tasks// 40.4% 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//
@ -17,10 +17,10 @@
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.9% not specifically accounted for 1.9% not specifically accounted for
42.6% in running Inter pipeline 42.5% in running Inter pipeline
11.0% in step preparation 10.8% in step preparation
9.7% in inter step 7/14: consolidate-text 9.6% in inter step 7/14: consolidate-text
8.1% in inter step 14/14: generate inform6 -> auto.inf 8.2% in inter step 14/14: generate inform6 -> auto.inf
8.0% in inter step 2/14: link 8.0% 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
@ -29,9 +29,8 @@
0.2% in inter step 8/14: resolve-external-symbols 0.2% in inter step 8/14: resolve-external-symbols
0.2% in inter step 9/14: inspect-plugs 0.2% in inter step 9/14: inspect-plugs
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 3/14: merge-template <- none
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.0% not specifically accounted for 2.2% not specifically accounted for
1.7% in supervisor 1.6% in supervisor
0.3% not specifically accounted for 0.3% not specifically accounted for

View file

@ -4,6 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <math.h>
#define i7_mgl_Grammar__Version 2 #define i7_mgl_Grammar__Version 2
i7val i7_mgl_debug_flag = 0; i7val i7_mgl_debug_flag = 0;
@ -99,14 +100,18 @@ i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val
return return_val; return return_val;
} }
i7val i7_mgl_sp = 0; i7val i7_mgl_sp = 0;
#define I7_ASM_STACK_CAPACITY 128
i7val i7_asm_stack[I7_ASM_STACK_CAPACITY];
int i7_asm_stack_pointer = 0;
i7val i7_pull(void) { i7val i7_pull(void) {
printf("Unimplemented: i7_pull.\n"); if (i7_asm_stack_pointer <= 0) { printf("Stack underflow\n"); return (i7val) 0; }
return (i7val) 0; return i7_asm_stack[--i7_asm_stack_pointer];
} }
void i7_push(i7val x) { void i7_push(i7val x) {
printf("Unimplemented: i7_push.\n"); if (i7_asm_stack_pointer >= I7_ASM_STACK_CAPACITY) { printf("Stack overflow\n"); return; }
i7_asm_stack[i7_asm_stack_pointer++] = x;
} }
void glulx_accelfunc(i7val x, i7val y) { void glulx_accelfunc(i7val x, i7val y) {
printf("Unimplemented: glulx_accelfunc.\n"); printf("Unimplemented: glulx_accelfunc.\n");
@ -124,10 +129,6 @@ void glulx_copy(i7val x, i7val y) {
printf("Unimplemented: glulx_copy.\n"); printf("Unimplemented: glulx_copy.\n");
} }
void glulx_div(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_div.\n");
}
void glulx_gestalt(i7val x, i7val y, i7val *z) { void glulx_gestalt(i7val x, i7val y, i7val *z) {
*z = 1; *z = 1;
} }
@ -161,7 +162,7 @@ void glulx_glk(i7val glk_api_selector, i7val i7varargc, i7val *z) {
} }
int glulx_jeq(i7val x, i7val y) { int glulx_jeq(i7val x, i7val y) {
printf("Unimplemented: glulx_jeq.\n"); if (x == y) return 1;
return 0; return 0;
} }
@ -171,12 +172,12 @@ int glulx_jleu(i7val x, i7val y) {
} }
int glulx_jnz(i7val x) { int glulx_jnz(i7val x) {
printf("Unimplemented: glulx_jnz.\n"); if (x != 0) return 1;
return 0; return 0;
} }
int glulx_jz(i7val x) { int glulx_jz(i7val x) {
printf("Unimplemented: glulx_jz.\n"); if (x == 0) return 1;
return 0; return 0;
} }
@ -192,17 +193,6 @@ void glulx_mfree(i7val x) {
printf("Unimplemented: glulx_mfree.\n"); printf("Unimplemented: glulx_mfree.\n");
} }
void glulx_mod(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_mod.\n");
}
void glulx_neg(i7val x, i7val y) {
printf("Unimplemented: glulx_neg.\n");
}
void glulx_numtof(i7val x, i7val y) {
printf("Unimplemented: glulx_numtof.\n");
}
void glulx_quit(void) { void glulx_quit(void) {
printf("Unimplemented: glulx_quit.\n"); printf("Unimplemented: glulx_quit.\n");
@ -216,12 +206,14 @@ void glulx_setiosys(i7val x, i7val y) {
// Deliberately ignored: we are using stdout, not glk // Deliberately ignored: we are using stdout, not glk
} }
void i7_print_char(i7val x);
void glulx_streamchar(i7val x) { void glulx_streamchar(i7val x) {
printf("%c", (int) x); i7_print_char(x);
} }
void i7_print_decimal(i7val x);
void glulx_streamnum(i7val x) { void glulx_streamnum(i7val x) {
printf("Unimplemented: glulx_streamnum.\n"); i7_print_decimal(x);
} }
void glulx_streamstr(i7val x) { void glulx_streamstr(i7val x) {
@ -229,11 +221,7 @@ void glulx_streamstr(i7val x) {
} }
void glulx_streamunichar(i7val x) { void glulx_streamunichar(i7val x) {
printf("%c", (int) x); i7_print_char(x);
}
void glulx_sub(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_sub.\n");
} }
void glulx_ushiftr(i7val x, i7val y, i7val z) { void glulx_ushiftr(i7val x, i7val y, i7val z) {
@ -270,105 +258,277 @@ i7val fn_i7_mgl_random(int n, i7val v) {
void glulx_setrandom(i7val x) { void glulx_setrandom(i7val x) {
i7_seed = (int) x; i7_seed = (int) x;
} }
void glulx_exp(i7val x, i7val y) { void glulx_add(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_exp.\n"); if (z) *z = x + y;
} }
void glulx_fadd(i7val x, i7val y, i7val z) { void glulx_sub(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fadd.\n"); if (z) *z = x - y;
} }
void glulx_fdiv(i7val x, i7val y, i7val z) { void glulx_neg(i7val x, i7val *y) {
printf("Unimplemented: glulx_fdiv.\n"); if (y) *y = -x;
} }
void glulx_floor(i7val x, i7val y) { void glulx_mul(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_floor.\n"); if (z) *z = x * y;
} }
void glulx_fmod(i7val x, i7val y, i7val z, i7val w) { void glulx_div(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fmod.\n"); if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 1; return; }
int result, ax, ay;
/* Since C doesn't guarantee the results of division of negative
numbers, we carefully convert everything to positive values
first. They have to be unsigned values, too, otherwise the
0x80000000 case goes wonky. */
if (x < 0) {
ax = (-x);
if (y < 0) {
ay = (-y);
result = ax / ay;
} else {
ay = y;
result = -(ax / ay);
}
} else {
ax = x;
if (y < 0) {
ay = (-y);
result = -(ax / ay);
} else {
ay = y;
result = ax / ay;
}
}
if (z) *z = result;
} }
void glulx_fmul(i7val x, i7val y, i7val z) { i7val glulx_div_r(i7val x, i7val y) {
printf("Unimplemented: glulx_fmul.\n"); i7val z;
glulx_div(x, y, &z);
return z;
} }
void glulx_fsub(i7val x, i7val y, i7val z) { void glulx_mod(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fsub.\n"); if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 0; return; }
int result, ax, ay;
if (y < 0) {
ay = -y;
} else {
ay = y;
}
if (x < 0) {
ax = (-x);
result = -(ax % ay);
} else {
ax = x;
result = ax % ay;
}
if (z) *z = result;
} }
void glulx_ftonumn(i7val x, i7val y) { i7val glulx_mod_r(i7val x, i7val y) {
printf("Unimplemented: glulx_ftonumn.\n"); i7val z;
glulx_mod(x, y, &z);
return z;
} }
void glulx_ftonumz(i7val x, i7val y) { typedef float gfloat32;
printf("Unimplemented: glulx_ftonumz.\n");
i7val encode_float(gfloat32 val) {
i7val res;
*(gfloat32 *)(&res) = val;
return res;
}
gfloat32 decode_float(i7val val) {
gfloat32 res;
*(i7val *)(&res) = val;
return res;
}
void glulx_exp(i7val x, i7val *y) {
*y = encode_float(expf(decode_float(x)));
}
void glulx_fadd(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) + decode_float(y));
}
void glulx_fdiv(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) / decode_float(y));
}
void glulx_floor(i7val x, i7val *y) {
*y = encode_float(floorf(decode_float(x)));
}
void glulx_fmod(i7val x, i7val y, i7val *z, i7val *w) {
float fx = decode_float(x);
float fy = decode_float(y);
float fquot = fmodf(fx, fy);
i7val quot = encode_float(fquot);
i7val rem = encode_float((fx-fquot) / fy);
if (rem == 0x0 || rem == 0x80000000) {
/* When the quotient is zero, the sign has been lost in the
shuffle. We'll set that by hand, based on the original
arguments. */
rem = (x ^ y) & 0x80000000;
}
if (z) *z = quot;
if (w) *w = rem;
}
void glulx_fmul(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) * decode_float(y));
}
void glulx_fsub(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) - decode_float(y));
}
void glulx_ftonumn(i7val x, i7val *y) {
float fx = decode_float(x);
i7val result;
if (!signbit(fx)) {
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
result = 0x7FFFFFFF;
else
result = (i7val) (roundf(fx));
}
else {
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
result = 0x80000000;
else
result = (i7val) (roundf(fx));
}
*y = result;
}
void glulx_ftonumz(i7val x, i7val *y) {
float fx = decode_float(x);
i7val result;
if (!signbit(fx)) {
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
result = 0x7FFFFFFF;
else
result = (i7val) (truncf(fx));
}
else {
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
result = 0x80000000;
else
result = (i7val) (truncf(fx));
}
*y = result;
}
void glulx_numtof(i7val x, i7val *y) {
*y = encode_float((float) x);
} }
int glulx_jfeq(i7val x, i7val y, i7val z) { int glulx_jfeq(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_jfeq.\n"); int result;
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
/* The delta is NaN, which can never match. */
result = 0;
} else if ((x == 0x7F800000 || x == 0xFF800000)
&& (y == 0x7F800000 || y == 0xFF800000)) {
/* Both are infinite. Opposite infinities are never equal,
even if the difference is infinite, so this is easy. */
result = (x == y);
} else {
float fx = decode_float(y) - decode_float(x);
float fy = fabs(decode_float(z));
result = (fx <= fy && fx >= -fy);
}
if (!result) return 1;
return 0; return 0;
} }
int glulx_jfne(i7val x, i7val y, i7val z) {
int result;
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
/* The delta is NaN, which can never match. */
result = 0;
} else if ((x == 0x7F800000 || x == 0xFF800000)
&& (y == 0x7F800000 || y == 0xFF800000)) {
/* Both are infinite. Opposite infinities are never equal,
even if the difference is infinite, so this is easy. */
result = (x == y);
} else {
float fx = decode_float(y) - decode_float(x);
float fy = fabs(decode_float(z));
result = (fx <= fy && fx >= -fy);
}
if (!result) return 1;
}
int glulx_jfge(i7val x, i7val y) { int glulx_jfge(i7val x, i7val y) {
printf("Unimplemented: glulx_jfge.\n"); if (isgreaterequal(decode_float(x), decode_float(y))) return 1;
return 0; return 0;
} }
int glulx_jflt(i7val x, i7val y) { int glulx_jflt(i7val x, i7val y) {
printf("Unimplemented: glulx_jflt.\n"); if (isless(decode_float(x), decode_float(y))) return 1;
return 0; return 0;
} }
int glulx_jisinf(i7val x) { int glulx_jisinf(i7val x) {
printf("Unimplemented: glulx_jisinf.\n"); if (isinf(decode_float(x))) return 1;
return 0; return 0;
} }
int glulx_jisnan(i7val x) { int glulx_jisnan(i7val x) {
printf("Unimplemented: glulx_jisnan.\n"); if (isnan(decode_float(x))) return 1;
return 0; return 0;
} }
void glulx_log(i7val x, i7val y) { void glulx_log(i7val x, i7val *y) {
printf("Unimplemented: glulx_log.\n"); *y = encode_float(logf(decode_float(x)));
} }
void glulx_acos(i7val x, i7val *y) { void glulx_acos(i7val x, i7val *y) {
printf("Unimplemented: glulx_acos\n"); *y = encode_float(acosf(decode_float(x)));
} }
void glulx_asin(i7val x, i7val *y) { void glulx_asin(i7val x, i7val *y) {
printf("Unimplemented: glulx_asin\n"); *y = encode_float(asinf(decode_float(x)));
} }
void glulx_atan(i7val x, i7val *y) { void glulx_atan(i7val x, i7val *y) {
printf("Unimplemented: glulx_atan\n"); *y = encode_float(atanf(decode_float(x)));
} }
void glulx_ceil(i7val x, i7val *y) { void glulx_ceil(i7val x, i7val *y) {
printf("Unimplemented: glulx_ceil\n"); *y = encode_float(ceilf(decode_float(x)));
} }
void glulx_cos(i7val x, i7val *y) { void glulx_cos(i7val x, i7val *y) {
printf("Unimplemented: glulx_cos\n"); *y = encode_float(cosf(decode_float(x)));
} }
void glulx_pow(i7val x, i7val y, i7val *z) { void glulx_pow(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_pow\n"); if (decode_float(x) == 1.0f)
*z = encode_float(1.0f);
else if ((decode_float(y) == 0.0f) || (decode_float(y) == -0.0f))
*z = encode_float(1.0f);
else if ((decode_float(x) == -1.0f) && isinf(decode_float(y)))
*z = encode_float(1.0f);
else
*z = encode_float(powf(decode_float(x), decode_float(y)));
} }
void glulx_sin(i7val x, i7val *y) { void glulx_sin(i7val x, i7val *y) {
printf("Unimplemented: glulx_sin\n"); *y = encode_float(sinf(decode_float(x)));
} }
void glulx_sqrt(i7val x, i7val *y) { void glulx_sqrt(i7val x, i7val *y) {
printf("Unimplemented: glulx_sqrt\n"); *y = encode_float(sqrtf(decode_float(x)));
} }
void glulx_tan(i7val x, i7val *y) { void glulx_tan(i7val x, i7val *y) {
printf("Unimplemented: glulx_tan\n"); *y = encode_float(tanf(decode_float(x)));
} }
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;
@ -415,8 +575,9 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) { i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
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)) return 0; (prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) {
owner_id = i7_class_of[owner_id]; owner_id = i7_class_of[owner_id];
}
return i7_properties[(int) owner_id].value[(int) prop_id]; return i7_properties[(int) owner_id].value[(int) prop_id];
} }
@ -477,11 +638,6 @@ typedef struct i7varargs {
i7val i7_mgl_self = 0; i7val i7_mgl_self = 0;
i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {
printf("Unimplemented: i7_gen_call.\n");
return 0;
}
i7val i7_call_0(i7val fn_ref) { i7val i7_call_0(i7val fn_ref) {
i7val args[10]; for (int i=0; i<10; i++) args[i] = 0; i7val args[10]; for (int i=0; i<10; i++) args[i] = 0;
return i7_gen_call(fn_ref, args, 0, 0); return i7_gen_call(fn_ref, args, 0, 0);
@ -554,6 +710,10 @@ void i7_style(int what) {
void i7_font(int what) { void i7_font(int what) {
} }
void i7_print_decimal(i7val x) {
printf("%d", (int) x);
}
void i7_print_char(i7val x) { void i7_print_char(i7val x) {
printf("%c", (int) x); printf("%c", (int) x);
} }

View file

@ -0,0 +1,83 @@
A fruit is a kind of object.
An apple, a pear and an orange are fruits. An fruit has a number called size.
The size of a fruit is usually 4. The size of the apple is 7.
A length is a kind of value. 1m specifies a length. 1km specifies a length scaled up by 1000.
An area is a kind of value. 10 sq m specifies an area.
A length times a length specifies an area.
A fruit has a length. An apple has length 1m. A pear has length 6m. An orange has length 3m.
To begin:
showme 2 + 3;
showme 2 plus -3;
showme 2 - 3;
showme 2 minus -3;
showme 4 * 5;
showme -4 times 5;
showme 7 multiplied by 9;
showme 256 / 4;
showme 440 divided by -10;
showme the remainder after dividing 17 by 3;
showme 93 to the nearest 10;
showme 99 to the nearest 10;
showme the square root of 144;
showme the cube root of 64;
showme the total size of the fruits;
showme 2m + 3m;
showme 2m plus -3m;
showme 2m - 3m;
showme 2m minus -3m;
showme 4m * 5m;
showme -4m times 5m;
showme 7m multiplied by 9m;
showme 256m / 4m;
showme 440 sq m divided by 10m;
showme the remainder after dividing 17m by 3;
showme 93m to the nearest 10m;
showme 99m to the nearest 10m;
showme the square root of 144 sq m;
showme the total length of the fruits;
showme 3 divided by 2;
showme 3 divided by 2.0;
showme 3.0 divided by 2;
showme 3.0 divided by 2.0;
showme 3 + 3;
showme pi + pi;
showme pi + 3;
showme 3 + pi;
showme 3 - 3;
showme pi - pi;
showme pi - 3;
showme 3 - pi;
showme 3 * 3;
showme pi * pi;
showme pi * 3;
showme 3 * pi;
showme 3 / 3;
showme pi / pi;
showme pi / 3;
showme 3 / pi;
showme the remainder after dividing pi by 3;
showme the remainder after dividing 3.3 by 1;
showme the remainder after dividing 3.7 by 1;
showme the remainder after dividing -3.3 by 1;
showme the remainder after dividing -3.7 by 1;
showme 2 to the power 4;
showme 100 to the power 0.5;
showme 7 to the power -1;
showme pi to the power 0;
showme reciprocal of -2;
showme reciprocal of 0.1;
showme reciprocal of 7;
showme reciprocal of plus infinity;
showme real square root of 2;
showme 1.4 to the nearest whole number;
showme 1.6 to the nearest whole number;
showme -1.6 to the nearest whole number;
showme 6 x 10^23 to the nearest whole number;
showme pi to the power 4;
showme pi * pi * pi * pi;

View file

@ -0,0 +1,70 @@
"2 + 3" = number: 5
"2 plus -3" = number: -1
"2 - 3" = number: -1
"2 minus -3" = number: 5
"4 * 5" = number: 20
"-4 times 5" = number: -20
"7 multiplied by 9" = number: 63
"256 / 4" = number: 64
"440 divided by -10" = number: -44
"remainder after dividing 17 by 3" = number: 2
"93 to the nearest 10" = number: 90
"99 to the nearest 10" = number: 100
"square root of 144" = number: 12
"cube root of 64" = number: 4
"total size of the fruits" = number: 15
"2m + 3m" = length: 5m
"2m plus -3m" = length: -1m
"2m - 3m" = length: -1m
"2m minus -3m" = length: 5m
"4m * 5m" = area: 20 sq m
"-4m times 5m" = area: -20 sq m
"7m multiplied by 9m" = area: 63 sq m
"256m / 4m" = number: 64
"440 sq m divided by 10m" = length: 44m
"remainder after dividing 17m by 3" = length: 2m
"93m to the nearest 10m" = length: 90m
"99m to the nearest 10m" = length: 100m
"square root of 144 sq m" = length: 12m
"total length of the fruits" = length: 10m
"3 divided by 2" = number: 1
"3 divided by 2.0" = real number: 1.5
"3.0 divided by 2" = real number: 1.5
"3.0 divided by 2.0" = real number: 1.5
"3 + 3" = number: 6
"pi + pi" = real number: 6.28319
"pi + 3" = real number: 6.14159
"3 + pi" = real number: 6.14159
"3 - 3" = number: 0
"pi - pi" = real number: 0.0
"pi - 3" = real number: 0.14159
"3 - pi" = real number: -0.14159
"3 * 3" = number: 9
"pi * pi" = real number: 9.8696
"pi * 3" = real number: 9.42478
"3 * pi" = real number: 9.42478
"3 / 3" = number: 1
"pi / pi" = real number: 1.0
"pi / 3" = real number: 1.0472
"3 / pi" = real number: 0.95493
"remainder after dividing pi by 3" = real number: 0.14159
"remainder after dividing 3.3 by 1" = real number: 0.3
"remainder after dividing 3.7 by 1" = real number: 0.7
"remainder after dividing -3.3 by 1" = real number: -0.3
"remainder after dividing -3.7 by 1" = real number: -0.7
"2 to the power 4" = real number: 16.0
"100 to the power 0.5" = real number: 10.0
"7 to the power -1" = real number: 0.14286
"pi to the power 0" = real number: 1.0
"reciprocal of -2" = real number: -0.5
"reciprocal of 0.1" = real number: 10.0
"reciprocal of 7" = real number: 0.14286
"reciprocal of plus infinity" = real number: 0.0
"real square root of 2" = real number: 1.41421
"1.4 to the nearest whole number" = number: 1
"1.6 to the nearest whole number" = number: 2
"-1.6 to the nearest whole number" = number: -2
"6 x 10^23 to the nearest whole number" = number: 2147483647
"pi to the power 4" = real number: 97.4091
"pi * pi * pi * pi" = real number: 97.4091

View file

@ -38,7 +38,6 @@ text_stream *RTKindIDs::identifier_for_weak_ID(kind_constructor *kc) {
return kc->explicit_identifier; return kc->explicit_identifier;
text_stream *invented = Str::new(); text_stream *invented = Str::new();
WRITE_TO(invented, "WEAK_ID_%d", kc->allocation_id); WRITE_TO(invented, "WEAK_ID_%d", kc->allocation_id);
LOG("I did make %S\n", invented);
return invented; return invented;
} }

View file

@ -159,16 +159,29 @@ void CodeGen::CL::constant(code_generation *gen, inter_tree_node *P) {
} else { } else {
CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format); CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format);
if (hang_one) CodeGen::Targets::array_entry(gen, I"1", format); if (hang_one) CodeGen::Targets::array_entry(gen, I"1", format);
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) { int entry_count = 0;
if (P->W.data[i] != DIVIDER_IVAL) { for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2)
TEMPORARY_TEXT(entry) if (P->W.data[i] != DIVIDER_IVAL)
CodeGen::select_temporary(gen, entry); entry_count++;
// if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE("("); if (hang_one) entry_count++;
CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub); inter_ti e = 0; int ips = FALSE;
// if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE(")"); if ((entry_count == 1) && (Inter::Symbols::read_annotation(con_name, ASSIMILATED_IANN) >= 0)) {
CodeGen::deselect_temporary(gen); inter_ti val1 = P->W.data[DATA_CONST_IFLD], val2 = P->W.data[DATA_CONST_IFLD+1];
CodeGen::Targets::array_entry(gen, entry, format); e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(P), val1, val2, &ips);
DISCARD_TEXT(entry) }
if (e > 1) {
LOG("Entry count 1 on %S masks %d blanks\n", CodeGen::CL::name(con_name), e);
CodeGen::Targets::array_entries(gen, (int) e, ips, format);
} else {
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
if (P->W.data[i] != DIVIDER_IVAL) {
TEMPORARY_TEXT(entry)
CodeGen::select_temporary(gen, entry);
CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub);
CodeGen::deselect_temporary(gen);
CodeGen::Targets::array_entry(gen, entry, format);
DISCARD_TEXT(entry)
}
} }
} }
CodeGen::Targets::end_array(gen, format); CodeGen::Targets::end_array(gen, format);
@ -322,6 +335,47 @@ void CodeGen::CL::exit_print_mode(void) {
printing_mode = FALSE; printing_mode = FALSE;
} }
inter_ti CodeGen::CL::evaluate(code_generation *gen, inter_symbols_table *T, inter_ti val1, inter_ti val2, int *ips) {
if (val1 == LITERAL_IVAL) return val2;
if (Inter::Symbols::is_stored_in_data(val1, val2)) {
inter_symbol *aliased = InterSymbolsTables::symbol_from_data_pair_and_table(val1, val2, T);
if (aliased == NULL) internal_error("bad aliased symbol");
inter_tree_node *D = aliased->definition;
if (D == NULL) internal_error("undefined symbol");
switch (D->W.data[FORMAT_CONST_IFLD]) {
case CONSTANT_DIRECT: {
inter_ti dval1 = D->W.data[DATA_CONST_IFLD];
inter_ti dval2 = D->W.data[DATA_CONST_IFLD + 1];
inter_ti e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), dval1, dval2, ips);
if (e == 0) {
text_stream *S = CodeGen::CL::name(aliased);
if (Str::eq(S, I"INDIV_PROP_START")) *ips = TRUE;
}
LOG("Eval const $3 = %d\n", aliased, e);
return e;
}
case CONSTANT_SUM_LIST:
case CONSTANT_PRODUCT_LIST:
case CONSTANT_DIFFERENCE_LIST:
case CONSTANT_QUOTIENT_LIST: {
inter_ti result = 0;
for (int i=DATA_CONST_IFLD; i<D->W.extent; i=i+2) {
inter_ti extra = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), D->W.data[i], D->W.data[i+1], ips);
if (i == DATA_CONST_IFLD) result = extra;
else {
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_SUM_LIST) result = result + extra;
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_PRODUCT_LIST) result = result * extra;
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIFFERENCE_LIST) result = result - extra;
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_QUOTIENT_LIST) result = result / extra;
}
}
return result;
}
}
}
return 0;
}
void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) { void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) {
inter_tree *I = gen->from; inter_tree *I = gen->from;
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);

View file

@ -326,6 +326,7 @@ void CodeGen::Targets::end_opcode(code_generation *gen) {
@e BEGIN_ARRAY_MTID @e BEGIN_ARRAY_MTID
@e ARRAY_ENTRY_MTID @e ARRAY_ENTRY_MTID
@e ARRAY_ENTRIES_MTID
@e END_ARRAY_MTID @e END_ARRAY_MTID
@d WORD_ARRAY_FORMAT 1 @d WORD_ARRAY_FORMAT 1
@ -336,6 +337,7 @@ void CodeGen::Targets::end_opcode(code_generation *gen) {
= =
VOID_METHOD_TYPE(BEGIN_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *const_name, int format) VOID_METHOD_TYPE(BEGIN_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *const_name, int format)
VOID_METHOD_TYPE(ARRAY_ENTRY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *entry, int format) VOID_METHOD_TYPE(ARRAY_ENTRY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *entry, int format)
VOID_METHOD_TYPE(ARRAY_ENTRIES_MTID, code_generation_target *cgt, code_generation *gen, int how_many, int plus_ips, int format)
VOID_METHOD_TYPE(END_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, int format) VOID_METHOD_TYPE(END_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, int format)
void CodeGen::Targets::begin_array(code_generation *gen, text_stream *const_name, int format) { void CodeGen::Targets::begin_array(code_generation *gen, text_stream *const_name, int format) {
VOID_METHOD_CALL(gen->target, BEGIN_ARRAY_MTID, gen, const_name, format); VOID_METHOD_CALL(gen->target, BEGIN_ARRAY_MTID, gen, const_name, format);
@ -343,6 +345,9 @@ void CodeGen::Targets::begin_array(code_generation *gen, text_stream *const_name
void CodeGen::Targets::array_entry(code_generation *gen, text_stream *entry, int format) { void CodeGen::Targets::array_entry(code_generation *gen, text_stream *entry, int format) {
VOID_METHOD_CALL(gen->target, ARRAY_ENTRY_MTID, gen, entry, format); VOID_METHOD_CALL(gen->target, ARRAY_ENTRY_MTID, gen, entry, format);
} }
void CodeGen::Targets::array_entries(code_generation *gen, int how_many, int plus_ips, int format) {
VOID_METHOD_CALL(gen->target, ARRAY_ENTRIES_MTID, gen, how_many, plus_ips, format);
}
void CodeGen::Targets::mangled_array_entry(code_generation *gen, text_stream *entry, int format) { void CodeGen::Targets::mangled_array_entry(code_generation *gen, text_stream *entry, int format) {
TEMPORARY_TEXT(mangled) TEMPORARY_TEXT(mangled)
CodeGen::Targets::mangle(gen, mangled, entry); CodeGen::Targets::mangle(gen, mangled, entry);

View file

@ -104,6 +104,7 @@ void CodeGen::I6::create_target(void) {
METHOD_ADD(cgt, END_OPCODE_MTID, CodeGen::I6::end_opcode); METHOD_ADD(cgt, END_OPCODE_MTID, CodeGen::I6::end_opcode);
METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CodeGen::I6::begin_array); METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CodeGen::I6::begin_array);
METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CodeGen::I6::array_entry); METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CodeGen::I6::array_entry);
METHOD_ADD(cgt, ARRAY_ENTRIES_MTID, CodeGen::I6::array_entries);
METHOD_ADD(cgt, END_ARRAY_MTID, CodeGen::I6::end_array); METHOD_ADD(cgt, END_ARRAY_MTID, CodeGen::I6::end_array);
METHOD_ADD(cgt, OFFER_PRAGMA_MTID, CodeGen::I6::offer_pragma) METHOD_ADD(cgt, OFFER_PRAGMA_MTID, CodeGen::I6::offer_pragma)
METHOD_ADD(cgt, END_GENERATION_MTID, CodeGen::I6::end_generation); METHOD_ADD(cgt, END_GENERATION_MTID, CodeGen::I6::end_generation);
@ -803,6 +804,17 @@ void CodeGen::I6::array_entry(code_generation_target *cgt, code_generation *gen,
WRITE(" (%S)", entry); WRITE(" (%S)", entry);
} }
@ Alternatively, we can just specify how many entries there will be: they will
then be initialised to 0.
=
void CodeGen::I6::array_entries(code_generation_target *cgt, code_generation *gen,
int how_many, int plus_ips, int format) {
text_stream *OUT = CodeGen::current(gen);
if (plus_ips) WRITE(" (%d + INDIV_PROP_START)", how_many, plus_ips);
else WRITE(" (%d)", how_many);
}
void CodeGen::I6::end_array(code_generation_target *cgt, code_generation *gen, int format) { void CodeGen::I6::end_array(code_generation_target *cgt, code_generation *gen, int format) {
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);
WRITE(";\n"); WRITE(";\n");

View file

@ -12,9 +12,19 @@ int CArithmetic::compile_primitive(code_generation *gen, inter_ti bip, inter_tre
case PLUS_BIP: WRITE("("); INV_A1; WRITE(" + "); INV_A2; WRITE(")"); break; case PLUS_BIP: WRITE("("); INV_A1; WRITE(" + "); INV_A2; WRITE(")"); break;
case MINUS_BIP: WRITE("("); INV_A1; WRITE(" - "); INV_A2; WRITE(")"); break; case MINUS_BIP: WRITE("("); INV_A1; WRITE(" - "); INV_A2; WRITE(")"); break;
case UNARYMINUS_BIP: WRITE("(-("); INV_A1; WRITE("))"); break; case UNARYMINUS_BIP: WRITE("(-("); INV_A1; WRITE("))"); break;
case TIMES_BIP: WRITE("("); INV_A1; WRITE("*"); INV_A2; WRITE(")"); break; case TIMES_BIP: WRITE("("); INV_A1; WRITE(" * "); INV_A2; WRITE(")"); break;
case DIVIDE_BIP: WRITE("("); INV_A1; WRITE("/"); INV_A2; WRITE(")"); break; case DIVIDE_BIP: if (CFunctionModel::inside_function(gen)) {
case MODULO_BIP: WRITE("("); INV_A1; WRITE("%%"); INV_A2; WRITE(")"); break; WRITE("glulx_div_r("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
} else {
WRITE("("); INV_A1; WRITE(" / "); INV_A2; WRITE(")"); break;
}
break;
case MODULO_BIP: if (CFunctionModel::inside_function(gen)) {
WRITE("glulx_mod_r("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
} else {
WRITE("("); INV_A1; WRITE(" %% "); INV_A2; WRITE(")");
}
break;
case BITWISEAND_BIP: WRITE("(("); INV_A1; WRITE(")&("); INV_A2; WRITE("))"); break; case BITWISEAND_BIP: WRITE("(("); INV_A1; WRITE(")&("); INV_A2; WRITE("))"); break;
case BITWISEOR_BIP: WRITE("(("); INV_A1; WRITE(")|("); INV_A2; WRITE("))"); break; case BITWISEOR_BIP: WRITE("(("); INV_A1; WRITE(")|("); INV_A2; WRITE("))"); break;
case BITWISENOT_BIP: WRITE("(~("); INV_A1; WRITE("))"); break; case BITWISENOT_BIP: WRITE("(~("); INV_A1; WRITE("))"); break;
@ -54,104 +64,276 @@ Note that floating-point numbers are stored in |i7val| values at runtime by
storing |float| (not, alas, |double|) values as if they were four-byte integers. storing |float| (not, alas, |double|) values as if they were four-byte integers.
= (text to inform7_clib.h) = (text to inform7_clib.h)
void glulx_exp(i7val x, i7val y) { void glulx_add(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_exp.\n"); if (z) *z = x + y;
} }
void glulx_fadd(i7val x, i7val y, i7val z) { void glulx_sub(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fadd.\n"); if (z) *z = x - y;
} }
void glulx_fdiv(i7val x, i7val y, i7val z) { void glulx_neg(i7val x, i7val *y) {
printf("Unimplemented: glulx_fdiv.\n"); if (y) *y = -x;
} }
void glulx_floor(i7val x, i7val y) { void glulx_mul(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_floor.\n"); if (z) *z = x * y;
} }
void glulx_fmod(i7val x, i7val y, i7val z, i7val w) { void glulx_div(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fmod.\n"); if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 1; return; }
int result, ax, ay;
/* Since C doesn't guarantee the results of division of negative
numbers, we carefully convert everything to positive values
first. They have to be unsigned values, too, otherwise the
0x80000000 case goes wonky. */
if (x < 0) {
ax = (-x);
if (y < 0) {
ay = (-y);
result = ax / ay;
} else {
ay = y;
result = -(ax / ay);
}
} else {
ax = x;
if (y < 0) {
ay = (-y);
result = -(ax / ay);
} else {
ay = y;
result = ax / ay;
}
}
if (z) *z = result;
} }
void glulx_fmul(i7val x, i7val y, i7val z) { i7val glulx_div_r(i7val x, i7val y) {
printf("Unimplemented: glulx_fmul.\n"); i7val z;
glulx_div(x, y, &z);
return z;
} }
void glulx_fsub(i7val x, i7val y, i7val z) { void glulx_mod(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_fsub.\n"); if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 0; return; }
int result, ax, ay;
if (y < 0) {
ay = -y;
} else {
ay = y;
}
if (x < 0) {
ax = (-x);
result = -(ax % ay);
} else {
ax = x;
result = ax % ay;
}
if (z) *z = result;
} }
void glulx_ftonumn(i7val x, i7val y) { i7val glulx_mod_r(i7val x, i7val y) {
printf("Unimplemented: glulx_ftonumn.\n"); i7val z;
glulx_mod(x, y, &z);
return z;
} }
void glulx_ftonumz(i7val x, i7val y) { typedef float gfloat32;
printf("Unimplemented: glulx_ftonumz.\n");
i7val encode_float(gfloat32 val) {
i7val res;
*(gfloat32 *)(&res) = val;
return res;
}
gfloat32 decode_float(i7val val) {
gfloat32 res;
*(i7val *)(&res) = val;
return res;
}
void glulx_exp(i7val x, i7val *y) {
*y = encode_float(expf(decode_float(x)));
}
void glulx_fadd(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) + decode_float(y));
}
void glulx_fdiv(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) / decode_float(y));
}
void glulx_floor(i7val x, i7val *y) {
*y = encode_float(floorf(decode_float(x)));
}
void glulx_fmod(i7val x, i7val y, i7val *z, i7val *w) {
float fx = decode_float(x);
float fy = decode_float(y);
float fquot = fmodf(fx, fy);
i7val quot = encode_float(fquot);
i7val rem = encode_float((fx-fquot) / fy);
if (rem == 0x0 || rem == 0x80000000) {
/* When the quotient is zero, the sign has been lost in the
shuffle. We'll set that by hand, based on the original
arguments. */
rem = (x ^ y) & 0x80000000;
}
if (z) *z = quot;
if (w) *w = rem;
}
void glulx_fmul(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) * decode_float(y));
}
void glulx_fsub(i7val x, i7val y, i7val *z) {
*z = encode_float(decode_float(x) - decode_float(y));
}
void glulx_ftonumn(i7val x, i7val *y) {
float fx = decode_float(x);
i7val result;
if (!signbit(fx)) {
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
result = 0x7FFFFFFF;
else
result = (i7val) (roundf(fx));
}
else {
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
result = 0x80000000;
else
result = (i7val) (roundf(fx));
}
*y = result;
}
void glulx_ftonumz(i7val x, i7val *y) {
float fx = decode_float(x);
i7val result;
if (!signbit(fx)) {
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
result = 0x7FFFFFFF;
else
result = (i7val) (truncf(fx));
}
else {
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
result = 0x80000000;
else
result = (i7val) (truncf(fx));
}
*y = result;
}
void glulx_numtof(i7val x, i7val *y) {
*y = encode_float((float) x);
} }
int glulx_jfeq(i7val x, i7val y, i7val z) { int glulx_jfeq(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_jfeq.\n"); int result;
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
/* The delta is NaN, which can never match. */
result = 0;
} else if ((x == 0x7F800000 || x == 0xFF800000)
&& (y == 0x7F800000 || y == 0xFF800000)) {
/* Both are infinite. Opposite infinities are never equal,
even if the difference is infinite, so this is easy. */
result = (x == y);
} else {
float fx = decode_float(y) - decode_float(x);
float fy = fabs(decode_float(z));
result = (fx <= fy && fx >= -fy);
}
if (!result) return 1;
return 0; return 0;
} }
int glulx_jfne(i7val x, i7val y, i7val z) {
int result;
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
/* The delta is NaN, which can never match. */
result = 0;
} else if ((x == 0x7F800000 || x == 0xFF800000)
&& (y == 0x7F800000 || y == 0xFF800000)) {
/* Both are infinite. Opposite infinities are never equal,
even if the difference is infinite, so this is easy. */
result = (x == y);
} else {
float fx = decode_float(y) - decode_float(x);
float fy = fabs(decode_float(z));
result = (fx <= fy && fx >= -fy);
}
if (!result) return 1;
}
int glulx_jfge(i7val x, i7val y) { int glulx_jfge(i7val x, i7val y) {
printf("Unimplemented: glulx_jfge.\n"); if (isgreaterequal(decode_float(x), decode_float(y))) return 1;
return 0; return 0;
} }
int glulx_jflt(i7val x, i7val y) { int glulx_jflt(i7val x, i7val y) {
printf("Unimplemented: glulx_jflt.\n"); if (isless(decode_float(x), decode_float(y))) return 1;
return 0; return 0;
} }
int glulx_jisinf(i7val x) { int glulx_jisinf(i7val x) {
printf("Unimplemented: glulx_jisinf.\n"); if (isinf(decode_float(x))) return 1;
return 0; return 0;
} }
int glulx_jisnan(i7val x) { int glulx_jisnan(i7val x) {
printf("Unimplemented: glulx_jisnan.\n"); if (isnan(decode_float(x))) return 1;
return 0; return 0;
} }
void glulx_log(i7val x, i7val y) { void glulx_log(i7val x, i7val *y) {
printf("Unimplemented: glulx_log.\n"); *y = encode_float(logf(decode_float(x)));
} }
void glulx_acos(i7val x, i7val *y) { void glulx_acos(i7val x, i7val *y) {
printf("Unimplemented: glulx_acos\n"); *y = encode_float(acosf(decode_float(x)));
} }
void glulx_asin(i7val x, i7val *y) { void glulx_asin(i7val x, i7val *y) {
printf("Unimplemented: glulx_asin\n"); *y = encode_float(asinf(decode_float(x)));
} }
void glulx_atan(i7val x, i7val *y) { void glulx_atan(i7val x, i7val *y) {
printf("Unimplemented: glulx_atan\n"); *y = encode_float(atanf(decode_float(x)));
} }
void glulx_ceil(i7val x, i7val *y) { void glulx_ceil(i7val x, i7val *y) {
printf("Unimplemented: glulx_ceil\n"); *y = encode_float(ceilf(decode_float(x)));
} }
void glulx_cos(i7val x, i7val *y) { void glulx_cos(i7val x, i7val *y) {
printf("Unimplemented: glulx_cos\n"); *y = encode_float(cosf(decode_float(x)));
} }
void glulx_pow(i7val x, i7val y, i7val *z) { void glulx_pow(i7val x, i7val y, i7val *z) {
printf("Unimplemented: glulx_pow\n"); if (decode_float(x) == 1.0f)
*z = encode_float(1.0f);
else if ((decode_float(y) == 0.0f) || (decode_float(y) == -0.0f))
*z = encode_float(1.0f);
else if ((decode_float(x) == -1.0f) && isinf(decode_float(y)))
*z = encode_float(1.0f);
else
*z = encode_float(powf(decode_float(x), decode_float(y)));
} }
void glulx_sin(i7val x, i7val *y) { void glulx_sin(i7val x, i7val *y) {
printf("Unimplemented: glulx_sin\n"); *y = encode_float(sinf(decode_float(x)));
} }
void glulx_sqrt(i7val x, i7val *y) { void glulx_sqrt(i7val x, i7val *y) {
printf("Unimplemented: glulx_sqrt\n"); *y = encode_float(sqrtf(decode_float(x)));
} }
void glulx_tan(i7val x, i7val *y) { void glulx_tan(i7val x, i7val *y) {
printf("Unimplemented: glulx_tan\n"); *y = encode_float(tanf(decode_float(x)));
} }
= =

View file

@ -15,14 +15,17 @@ typedef struct C_generation_assembly_data {
int operand_count; int operand_count;
int operand_branches; int operand_branches;
struct inter_tree_node *operand_label; struct inter_tree_node *operand_label;
int pointer_on_operand; int pointer_on_operand[16];
int pushed_result;
} C_generation_assembly_data; } C_generation_assembly_data;
void CAssembly::initialise_data(code_generation *gen) { void CAssembly::initialise_data(code_generation *gen) {
C_GEN_DATA(asmdata.operand_count) = 0; C_GEN_DATA(asmdata.operand_count) = 0;
C_GEN_DATA(asmdata.operand_branches) = FALSE; C_GEN_DATA(asmdata.operand_branches) = FALSE;
C_GEN_DATA(asmdata.operand_label) = NULL; C_GEN_DATA(asmdata.operand_label) = NULL;
C_GEN_DATA(asmdata.pointer_on_operand) = -1; for (int i=0; i<16; i++)
C_GEN_DATA(asmdata.pointer_on_operand[i]) = FALSE;
C_GEN_DATA(asmdata.pushed_result) = FALSE;
} }
void CAssembly::begin(code_generation *gen) { void CAssembly::begin(code_generation *gen) {
@ -37,14 +40,18 @@ void CAssembly::end(code_generation *gen) {
= (text to inform7_clib.h) = (text to inform7_clib.h)
i7val i7_mgl_sp = 0; i7val i7_mgl_sp = 0;
#define I7_ASM_STACK_CAPACITY 128
i7val i7_asm_stack[I7_ASM_STACK_CAPACITY];
int i7_asm_stack_pointer = 0;
i7val i7_pull(void) { i7val i7_pull(void) {
printf("Unimplemented: i7_pull.\n"); if (i7_asm_stack_pointer <= 0) { printf("Stack underflow\n"); return (i7val) 0; }
return (i7val) 0; return i7_asm_stack[--i7_asm_stack_pointer];
} }
void i7_push(i7val x) { void i7_push(i7val x) {
printf("Unimplemented: i7_push.\n"); if (i7_asm_stack_pointer >= I7_ASM_STACK_CAPACITY) { printf("Stack overflow\n"); return; }
i7_asm_stack[i7_asm_stack_pointer++] = x;
} }
= =
@ -54,6 +61,7 @@ void i7_push(i7val x) {
void CAssembly::begin_opcode(code_generation_target *cgt, code_generation *gen, text_stream *opcode) { void CAssembly::begin_opcode(code_generation_target *cgt, code_generation *gen, text_stream *opcode) {
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);
C_GEN_DATA(asmdata.operand_branches) = FALSE; C_GEN_DATA(asmdata.operand_branches) = FALSE;
C_GEN_DATA(asmdata.pushed_result) = FALSE;
C_GEN_DATA(asmdata.operand_label) = NULL; C_GEN_DATA(asmdata.operand_label) = NULL;
if (Str::get_at(opcode, 1) == 'j') { C_GEN_DATA(asmdata.operand_branches) = TRUE; } if (Str::get_at(opcode, 1) == 'j') { C_GEN_DATA(asmdata.operand_branches) = TRUE; }
if (Str::eq(opcode, I"@return")) WRITE("return "); if (Str::eq(opcode, I"@return")) WRITE("return ");
@ -62,23 +70,44 @@ void CAssembly::begin_opcode(code_generation_target *cgt, code_generation *gen,
CNamespace::mangle_opcode(cgt, OUT, opcode); CNamespace::mangle_opcode(cgt, OUT, opcode);
} }
WRITE("("); C_GEN_DATA(asmdata.operand_count) = 0; WRITE("("); C_GEN_DATA(asmdata.operand_count) = 0;
C_GEN_DATA(asmdata.pointer_on_operand) = -1; for (int i=0; i<16; i++)
if (Str::eq(opcode, I"@acos")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; C_GEN_DATA(asmdata.pointer_on_operand[i]) = FALSE;
if (Str::eq(opcode, I"@aload")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@acos")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@aloadb")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@add")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@aloads")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@aload")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@asin")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@aloadb")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@atan")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@aloads")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@binarysearch")) C_GEN_DATA(asmdata.pointer_on_operand) = 8; if (Str::eq(opcode, I"@asin")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@ceil")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@atan")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@cos")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@binarysearch")) C_GEN_DATA(asmdata.pointer_on_operand[8]) = TRUE;
if (Str::eq(opcode, I"@gestalt")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@ceil")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@glk")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@cos")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@pow")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@div")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@shiftl")) C_GEN_DATA(asmdata.pointer_on_operand) = 3; if (Str::eq(opcode, I"@exp")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@sin")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@fadd")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@sqrt")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@fdiv")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@tan")) C_GEN_DATA(asmdata.pointer_on_operand) = 2; if (Str::eq(opcode, I"@floor")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@fmod")) {
C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
C_GEN_DATA(asmdata.pointer_on_operand[4]) = TRUE;
}
if (Str::eq(opcode, I"@fmul")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@fsub")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@ftonumn")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@ftonumz")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@gestalt")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@glk")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@log")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@mod")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@mul")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@neg")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@numtof")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@pow")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@shiftl")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@sin")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@sqrt")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
if (Str::eq(opcode, I"@sub")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
if (Str::eq(opcode, I"@tan")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
} }
void CAssembly::supply_operand(code_generation_target *cgt, code_generation *gen, inter_tree_node *F, int is_label) { void CAssembly::supply_operand(code_generation_target *cgt, code_generation *gen, inter_tree_node *F, int is_label) {
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);
@ -86,17 +115,19 @@ void CAssembly::supply_operand(code_generation_target *cgt, code_generation *gen
C_GEN_DATA(asmdata.operand_label) = F; C_GEN_DATA(asmdata.operand_label) = F;
} else { } else {
if (C_GEN_DATA(asmdata.operand_count)++ > 0) WRITE(", "); if (C_GEN_DATA(asmdata.operand_count)++ > 0) WRITE(", ");
if (C_GEN_DATA(asmdata.operand_count) == C_GEN_DATA(asmdata.pointer_on_operand)) { TEMPORARY_TEXT(write_to)
TEMPORARY_TEXT(write_to) CodeGen::select_temporary(gen, write_to);
CodeGen::select_temporary(gen, write_to); CodeGen::FC::frame(gen, F);
CodeGen::FC::frame(gen, F); CodeGen::deselect_temporary(gen);
CodeGen::deselect_temporary(gen); if (C_GEN_DATA(asmdata.pointer_on_operand[C_GEN_DATA(asmdata.operand_count)])) {
if (Str::eq(write_to, I"0")) WRITE("NULL"); if (Str::eq(write_to, I"i7_mgl_sp")) { WRITE("&%S", write_to); C_GEN_DATA(asmdata.pushed_result) = TRUE; }
else if (Str::eq(write_to, I"0")) WRITE("NULL");
else WRITE("&%S", write_to); else WRITE("&%S", write_to);
DISCARD_TEXT(write_to)
} else { } else {
CodeGen::FC::frame(gen, F); if (Str::eq(write_to, I"i7_mgl_sp")) { WRITE("i7_pull()"); }
else WRITE("%S", write_to);
} }
DISCARD_TEXT(write_to)
} }
} }
void CAssembly::end_opcode(code_generation_target *cgt, code_generation *gen) { void CAssembly::end_opcode(code_generation_target *cgt, code_generation *gen) {
@ -108,6 +139,7 @@ void CAssembly::end_opcode(code_generation_target *cgt, code_generation *gen) {
if (C_GEN_DATA(asmdata.operand_label) == NULL) internal_error("no branch label"); if (C_GEN_DATA(asmdata.operand_label) == NULL) internal_error("no branch label");
CodeGen::FC::frame(gen, C_GEN_DATA(asmdata.operand_label)); CodeGen::FC::frame(gen, C_GEN_DATA(asmdata.operand_label));
} }
if (C_GEN_DATA(asmdata.pushed_result)) WRITE("; i7_push(i7_mgl_sp)");
} }
@ @
@ -129,10 +161,6 @@ void glulx_copy(i7val x, i7val y) {
printf("Unimplemented: glulx_copy.\n"); printf("Unimplemented: glulx_copy.\n");
} }
void glulx_div(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_div.\n");
}
void glulx_gestalt(i7val x, i7val y, i7val *z) { void glulx_gestalt(i7val x, i7val y, i7val *z) {
*z = 1; *z = 1;
} }
@ -166,7 +194,7 @@ void glulx_glk(i7val glk_api_selector, i7val i7varargc, i7val *z) {
} }
int glulx_jeq(i7val x, i7val y) { int glulx_jeq(i7val x, i7val y) {
printf("Unimplemented: glulx_jeq.\n"); if (x == y) return 1;
return 0; return 0;
} }
@ -176,12 +204,12 @@ int glulx_jleu(i7val x, i7val y) {
} }
int glulx_jnz(i7val x) { int glulx_jnz(i7val x) {
printf("Unimplemented: glulx_jnz.\n"); if (x != 0) return 1;
return 0; return 0;
} }
int glulx_jz(i7val x) { int glulx_jz(i7val x) {
printf("Unimplemented: glulx_jz.\n"); if (x == 0) return 1;
return 0; return 0;
} }
@ -197,17 +225,6 @@ void glulx_mfree(i7val x) {
printf("Unimplemented: glulx_mfree.\n"); printf("Unimplemented: glulx_mfree.\n");
} }
void glulx_mod(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_mod.\n");
}
void glulx_neg(i7val x, i7val y) {
printf("Unimplemented: glulx_neg.\n");
}
void glulx_numtof(i7val x, i7val y) {
printf("Unimplemented: glulx_numtof.\n");
}
void glulx_quit(void) { void glulx_quit(void) {
printf("Unimplemented: glulx_quit.\n"); printf("Unimplemented: glulx_quit.\n");
@ -221,12 +238,14 @@ void glulx_setiosys(i7val x, i7val y) {
// Deliberately ignored: we are using stdout, not glk // Deliberately ignored: we are using stdout, not glk
} }
void i7_print_char(i7val x);
void glulx_streamchar(i7val x) { void glulx_streamchar(i7val x) {
printf("%c", (int) x); i7_print_char(x);
} }
void i7_print_decimal(i7val x);
void glulx_streamnum(i7val x) { void glulx_streamnum(i7val x) {
printf("Unimplemented: glulx_streamnum.\n"); i7_print_decimal(x);
} }
void glulx_streamstr(i7val x) { void glulx_streamstr(i7val x) {
@ -234,11 +253,7 @@ void glulx_streamstr(i7val x) {
} }
void glulx_streamunichar(i7val x) { void glulx_streamunichar(i7val x) {
printf("%c", (int) x); i7_print_char(x);
}
void glulx_sub(i7val x, i7val y, i7val z) {
printf("Unimplemented: glulx_sub.\n");
} }
void glulx_ushiftr(i7val x, i7val y, i7val z) { void glulx_ushiftr(i7val x, i7val y, i7val z) {

View file

@ -20,12 +20,14 @@ typedef struct C_generation_function_model_data {
struct text_stream *prototype; struct text_stream *prototype;
int argument_count; int argument_count;
struct final_c_function *current_fcf; struct final_c_function *current_fcf;
int compiling_function;
} C_generation_function_model_data; } C_generation_function_model_data;
void CFunctionModel::initialise_data(code_generation *gen) { void CFunctionModel::initialise_data(code_generation *gen) {
C_GEN_DATA(fndata.prototype) = Str::new(); C_GEN_DATA(fndata.prototype) = Str::new();
C_GEN_DATA(fndata.argument_count) = 0; C_GEN_DATA(fndata.argument_count) = 0;
C_GEN_DATA(fndata.current_fcf) = NULL; C_GEN_DATA(fndata.current_fcf) = NULL;
C_GEN_DATA(fndata.compiling_function) = FALSE;
} }
void CFunctionModel::begin(code_generation *gen) { void CFunctionModel::begin(code_generation *gen) {
@ -65,6 +67,43 @@ void CFunctionModel::end(code_generation *gen) {
WRITE("#endif\n"); WRITE("#endif\n");
WRITE("#endif\n"); WRITE("#endif\n");
CodeGen::deselect(gen, saved); CodeGen::deselect(gen, saved);
saved = CodeGen::select(gen, c_fundamental_types_I7CGS);
OUT = CodeGen::current(gen);
WRITE("i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message);\n");
CodeGen::deselect(gen, saved);
saved = CodeGen::select(gen, c_stubs_at_eof_I7CGS);
OUT = CodeGen::current(gen);
WRITE("i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {\n"); INDENT;
WRITE("switch (fn_ref) {\n"); INDENT;
final_c_function *fcf;
LOOP_OVER(fcf, final_c_function) {
WRITE("case ");
CNamespace::mangle(NULL, OUT, fcf->identifier_as_constant);
WRITE(": return fn_");
CNamespace::mangle(NULL, OUT, fcf->identifier_as_constant);
WRITE("(");
if (fcf->uses_vararg_model) {
WRITE("2, argc, (i7varargs) { ");
for (int i=0; i<10; i++) {
if (i > 0) WRITE(", ");
WRITE("args[%d]", i);
}
WRITE(" }");
for (int i=0; i<fcf->max_arity - 1; i++)
WRITE(", 0");
} else {
WRITE("argc");
for (int i=0; i<fcf->max_arity; i++)
WRITE(", args[%d]", i);
}
WRITE(");\n");
}
OUTDENT; WRITE("}\n");
WRITE("printf(\"function not found\\n\");\n");
OUTDENT; WRITE("}\n");
CodeGen::deselect(gen, saved);
} }
typedef struct final_c_function { typedef struct final_c_function {
@ -93,6 +132,7 @@ void CFunctionModel::declare_fcf(code_generation *gen, final_c_function *fcf) {
void CFunctionModel::make_veneer_fcf(code_generation *gen, text_stream *unmangled_name) { void CFunctionModel::make_veneer_fcf(code_generation *gen, text_stream *unmangled_name) {
final_c_function *fcf = CFunctionModel::new_fcf(unmangled_name); final_c_function *fcf = CFunctionModel::new_fcf(unmangled_name);
fcf->max_arity = 1;
CFunctionModel::declare_fcf(gen, fcf); CFunctionModel::declare_fcf(gen, fcf);
} }
@ -124,6 +164,7 @@ void CFunctionModel::begin_function_code(code_generation_target *cgt, code_gener
WRITE("printf(\"called %S\\n\");\n", C_GEN_DATA(fndata.current_fcf)->identifier_as_constant); WRITE("printf(\"called %S\\n\");\n", C_GEN_DATA(fndata.current_fcf)->identifier_as_constant);
} }
} }
C_GEN_DATA(fndata.compiling_function) = TRUE;
} }
void CFunctionModel::place_label(code_generation_target *cgt, code_generation *gen, text_stream *label_name) { void CFunctionModel::place_label(code_generation_target *cgt, code_generation *gen, text_stream *label_name) {
@ -150,9 +191,15 @@ void CFunctionModel::end_function(code_generation_target *cgt, int pass, code_ge
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);
WRITE("return 1;\n"); WRITE("return 1;\n");
WRITE("\n}\n"); WRITE("\n}\n");
C_GEN_DATA(fndata.compiling_function) = FALSE;
} }
} }
int CFunctionModel::inside_function(code_generation *gen) {
if (C_GEN_DATA(fndata.compiling_function)) return TRUE;
return FALSE;
}
void CFunctionModel::begin_function_call(code_generation_target *cgt, code_generation *gen, inter_symbol *fn, int argc) { void CFunctionModel::begin_function_call(code_generation_target *cgt, code_generation *gen, inter_symbol *fn, int argc) {
inter_tree_node *D = fn->definition; inter_tree_node *D = fn->definition;
if ((D) && (D->W.data[ID_IFLD] == CONSTANT_IST) && (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIRECT)) { if ((D) && (D->W.data[ID_IFLD] == CONSTANT_IST) && (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIRECT)) {
@ -250,11 +297,6 @@ typedef struct i7varargs {
i7val i7_mgl_self = 0; i7val i7_mgl_self = 0;
i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {
printf("Unimplemented: i7_gen_call.\n");
return 0;
}
i7val i7_call_0(i7val fn_ref) { i7val i7_call_0(i7val fn_ref) {
i7val args[10]; for (int i=0; i<10; i++) args[i] = 0; i7val args[10]; for (int i=0; i<10; i++) args[i] = 0;
return i7_gen_call(fn_ref, args, 0, 0); return i7_gen_call(fn_ref, args, 0, 0);

View file

@ -36,7 +36,7 @@ int CInputOutputModel::compile_primitive(code_generation *gen, inter_ti bip, int
case PRINTNAME_BIP: WRITE("i7_print_name("); INV_A1; WRITE(")"); break; case PRINTNAME_BIP: WRITE("i7_print_name("); INV_A1; WRITE(")"); break;
case PRINTOBJ_BIP: WRITE("i7_print_object("); INV_A1; WRITE(")"); break; case PRINTOBJ_BIP: WRITE("i7_print_object("); INV_A1; WRITE(")"); break;
case PRINTPROPERTY_BIP: WRITE("i7_print_property("); INV_A1; WRITE(")"); break; case PRINTPROPERTY_BIP: WRITE("i7_print_property("); INV_A1; WRITE(")"); break;
case PRINTNUMBER_BIP: WRITE("printf(\"%%d\", (int) "); INV_A1; WRITE(")"); break; case PRINTNUMBER_BIP: WRITE("i7_print_decimal("); INV_A1; WRITE(")"); break;
case PRINTNLNUMBER_BIP: WRITE("i7_print_number("); INV_A1; WRITE(")"); break; case PRINTNLNUMBER_BIP: WRITE("i7_print_number("); INV_A1; WRITE(")"); break;
case PRINTDEF_BIP: WRITE("i7_print_def_art("); INV_A1; WRITE(")"); break; case PRINTDEF_BIP: WRITE("i7_print_def_art("); INV_A1; WRITE(")"); break;
case PRINTCDEF_BIP: WRITE("i7_print_cdef_art("); INV_A1; WRITE(")"); break; case PRINTCDEF_BIP: WRITE("i7_print_cdef_art("); INV_A1; WRITE(")"); break;
@ -64,6 +64,10 @@ void i7_style(int what) {
void i7_font(int what) { void i7_font(int what) {
} }
void i7_print_decimal(i7val x) {
printf("%d", (int) x);
}
void i7_print_char(i7val x) { void i7_print_char(i7val x) {
printf("%c", (int) x); printf("%c", (int) x);
} }

View file

@ -8,6 +8,7 @@ How arrays of all kinds are stored in C.
void CMemoryModel::initialise(code_generation_target *cgt) { void CMemoryModel::initialise(code_generation_target *cgt) {
METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CMemoryModel::begin_array); METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CMemoryModel::begin_array);
METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CMemoryModel::array_entry); METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CMemoryModel::array_entry);
METHOD_ADD(cgt, ARRAY_ENTRIES_MTID, CMemoryModel::array_entries);
METHOD_ADD(cgt, END_ARRAY_MTID, CMemoryModel::end_array); METHOD_ADD(cgt, END_ARRAY_MTID, CMemoryModel::end_array);
} }
@ -198,7 +199,7 @@ void CMemoryModel::array_entry(code_generation_target *cgt, code_generation *gen
} }
@<This is a byte entry@> = @<This is a byte entry@> =
WRITE(" (i7byte) %S,\n", entry); WRITE(" (i7byte) %S, /* %d */\n", entry, C_GEN_DATA(memdata.himem));
C_GEN_DATA(memdata.himem) += 1; C_GEN_DATA(memdata.himem) += 1;
@ Now we see why it was important for |I7BYTE_0| and so on to be macros: they @ Now we see why it was important for |I7BYTE_0| and so on to be macros: they
@ -207,10 +208,20 @@ and therefore if |X| is a valid constant-context expression in C then so is
|I7BYTE_0(X)|. |I7BYTE_0(X)|.
@<This is a word entry@> = @<This is a word entry@> =
WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n", WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S), /* %d */\n",
entry, entry, entry, entry); entry, entry, entry, entry, C_GEN_DATA(memdata.himem));
C_GEN_DATA(memdata.himem) += 4; C_GEN_DATA(memdata.himem) += 4;
@ Alternatively, we can just specify how many entries there will be: they will
then be initialised to 0.
=
void CMemoryModel::array_entries(code_generation_target *cgt, code_generation *gen,
int how_many, int plus_ips, int format) {
if (plus_ips) how_many += 64;
for (int i=0; i<how_many; i++) CMemoryModel::array_entry(cgt, gen, I"0", format);
}
@ When all the entries have been placed, the following is called. It does nothing @ When all the entries have been placed, the following is called. It does nothing
except to predeclare the extent constant, if one was used. except to predeclare the extent constant, if one was used.

View file

@ -124,14 +124,14 @@ overlap.
WRITE("#define i7_max_objects %d\n", C_GEN_DATA(objdata.owner_id_count) + 1); WRITE("#define i7_max_objects %d\n", C_GEN_DATA(objdata.owner_id_count) + 1);
WRITE("i7val i7_metaclass_of[] = { 0"); WRITE("i7val i7_metaclass_of[] = { 0");
for (int i=1; i<C_GEN_DATA(objdata.owner_id_count); i++) { for (int i=1; i<=C_GEN_DATA(objdata.owner_id_count); i++) {
if (C_GEN_DATA(objdata.owners)[i].is_class) WRITE(", i7_mgl_Class"); if (C_GEN_DATA(objdata.owners)[i].is_class) WRITE(", i7_mgl_Class");
else WRITE(", i7_mgl_Object"); else WRITE(", i7_mgl_Object");
} }
WRITE(" };\n"); WRITE(" };\n");
WRITE("i7val i7_class_of[] = { 0"); WRITE("i7val i7_class_of[] = { 0");
for (int i=1; i<C_GEN_DATA(objdata.owner_id_count); i++) { for (int i=1; i<=C_GEN_DATA(objdata.owner_id_count); i++) {
WRITE(", "); CNamespace::mangle(NULL, OUT, C_GEN_DATA(objdata.owners)[i].class); WRITE(", "); CNamespace::mangle(NULL, OUT, C_GEN_DATA(objdata.owners)[i].class);
} }
WRITE(" };\n"); WRITE(" };\n");
@ -256,17 +256,18 @@ only need to be unique, so the order is not significant.
void CObjectModel::declare_property_by_name(code_generation *gen, text_stream *name, int used) { void CObjectModel::declare_property_by_name(code_generation *gen, text_stream *name, int used) {
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS); generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
text_stream *OUT = CodeGen::current(gen); text_stream *OUT = CodeGen::current(gen);
if (used) { // if (used) {
WRITE("#define "); WRITE("#define ");
CNamespace::mangle(NULL, OUT, name); CNamespace::mangle(NULL, OUT, name);
WRITE(" %d\n", C_GEN_DATA(objdata.property_id_counter)++); WRITE(" %d\n", C_GEN_DATA(objdata.property_id_counter)++);
} else { /* } else {
WRITE("#ifndef "); WRITE("#ifndef ");
CNamespace::mangle(NULL, OUT, name); CNamespace::mangle(NULL, OUT, name);
WRITE("\n#define "); WRITE("\n#define ");
CNamespace::mangle(NULL, OUT, name); CNamespace::mangle(NULL, OUT, name);
WRITE(" 0\n#endif\n"); WRITE(" 0\n#endif\n");
} }
*/
CodeGen::deselect(gen, saved); CodeGen::deselect(gen, saved);
} }
@ -315,6 +316,11 @@ By fiat, that will be 0.
OUTDENT; OUTDENT;
WRITE("}\n"); WRITE("}\n");
CodeGen::deselect(gen, saved); CodeGen::deselect(gen, saved);
saved = CodeGen::select(gen, c_fundamental_types_I7CGS);
OUT = CodeGen::current(gen);
WRITE("i7val fn_i7_mgl_CreatePropertyOffsets(int argc);\n");
CodeGen::deselect(gen, saved);
} }
@h Property-value initialiser function. @h Property-value initialiser function.
@ -432,8 +438,9 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) { i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
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)) return 0; (prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) {
owner_id = i7_class_of[owner_id]; owner_id = i7_class_of[owner_id];
}
return i7_properties[(int) owner_id].value[(int) prop_id]; return i7_properties[(int) owner_id].value[(int) prop_id];
} }

View file

@ -48,6 +48,7 @@ first of those:
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <math.h>
= =
@h Segmentation. @h Segmentation.