mirror of
https://github.com/ganelson/inform.git
synced 2024-06-30 22:14:58 +03:00
Further struggles to understand attribute allocation
This commit is contained in:
parent
e81b4326f5
commit
fcf8c552ab
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6T37 'Krypton' (27 September 2021)
|
||||
v10.1.0-alpha.1+6T38 'Krypton' (28 September 2021)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 27 September 2021
|
||||
Build Number: 6T37
|
||||
Build Date: 28 September 2021
|
||||
Build Number: 6T38
|
||||
|
|
|
@ -79,8 +79,6 @@ before it is known how they will be used.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Submain</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">FBNA_PROP_NUMBER</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MAX_POSITIVE_NUMBER</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">INITIALISE_MEMORY_R</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">; </span><span class="identifier-syntax">VM_PreInitialise</span><span class="plain-syntax">(); #</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">LanguageInitialise</span><span class="plain-syntax">; </span><span class="identifier-syntax">LanguageInitialise</span><span class="plain-syntax">(); #</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -124,7 +124,8 @@ object.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">literal_text_mode</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">global_variables</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text_literals</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">properties</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">assimilated_properties</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unassimilated_properties</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instances</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kinds</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -148,7 +149,8 @@ object.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">literal_text_mode</span><span class="plain-syntax"> = </span><span class="constant-syntax">REGULAR_LTM</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">global_variables</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">text_literals</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_literal_holder</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">properties</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">assimilated_properties</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">unassimilated_properties</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">instances</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">kinds</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">;</span>
|
||||
|
@ -353,13 +355,13 @@ some temporary stream somewhere. For that, use the following pair:
|
|||
</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">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_8_5_1_1">§6.8.5.1.1</a>, <a href="2-vo.html#SP6_11_1">§6.11.1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_9_5_1_1">§1.9.5.1.1</a>, <a href="2-vo.html#SP1_12_1">§1.12.1</a>, <a href="2-vo.html#SP7">§7</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nested temporary segments"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_8_5_1_1">§6.8.5.1.1</a>, <a href="2-vo.html#SP6_11_1">§6.11.1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_9_5_1_1">§1.9.5.1.1</a>, <a href="2-vo.html#SP1_12_1">§1.12.1</a>, <a href="2-vo.html#SP7">§7</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -369,7 +371,7 @@ if it has been "temporarily diverted" then the regiular selection is ignored.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP15_1">§15.1</a><br/>The Vanilla Generator - <a href="2-tvg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP10">§10</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP12">§12</a>, <a href="5-cmm.html#SP14">§14</a>, <a href="5-cmm.html#SP15">§15</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP10">§10</a>, <a href="5-com.html#SP11">§11</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP4">§4</a>, <a href="5-clt.html#SP5">§5</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP15_1">§15.1</a><br/>The Vanilla Generator - <a href="2-tvg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP7">§7</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP10">§10</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP12">§12</a>, <a href="5-cmm.html#SP14">§14</a>, <a href="5-cmm.html#SP15">§15</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP10">§10</a>, <a href="5-com.html#SP11">§11</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP4">§4</a>, <a href="5-clt.html#SP5">§5</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="identifier-syntax">temporarily_diverted_to</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">pos</span><span class="plain-syntax">.</span><span class="element-syntax">current_segment</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -422,15 +424,15 @@ what we've worked on so far.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::marked</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">CodeGen::marked</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8_4">§6.8.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::marked</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">CodeGen::marked</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9_4">§1.9.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</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">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRAVERSE_MARK_BIT</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::mark</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">CodeGen::mark</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8_4">§6.8.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::mark</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">CodeGen::mark</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9_4">§1.9.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::set_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRAVERSE_MARK_BIT</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::unmark</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">CodeGen::unmark</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8">§6.8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::unmark</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">CodeGen::unmark</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9">§1.9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::clear_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRAVERSE_MARK_BIT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -445,7 +447,7 @@ extracted from some Inter instruction.
|
|||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cg.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Generate from a value pair</span><span class="named-paragraph-number">15.1</span></a></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::pair</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CodeGen::pair</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a>, <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_8_5_1_1">§6.8.5.1.1</a><br/>Vanilla Code - <a href="2-vc2.html#SP4">§4</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::pair</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CodeGen::pair</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a>, <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_9_5_1_1">§1.9.5.1.1</a>, <a href="2-vo.html#SP7">§7</a><br/>Vanilla Code - <a href="2-vc2.html#SP4">§4</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val2</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">?(</span><span class="identifier-syntax">Inter::Packages::scope_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cg.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Generate from a value pair</span><span class="named-paragraph-number">15.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -233,7 +233,7 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">MANGLE_IDENTIFIER_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::mangle</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Generators::mangle</span></span>:<br/><a href="2-cg2.html#SP15">§15</a>, <a href="2-cg2.html#SP18">§18</a><br/>Vanilla Objects - <a href="2-vo.html#SP5_6">§5.6</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP9">§9</a><br/>C Memory Model - <a href="5-cmm.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::mangle</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Generators::mangle</span></span>:<br/><a href="2-cg2.html#SP15">§15</a>, <a href="2-cg2.html#SP18">§18</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP9">§9</a><br/>C Memory Model - <a href="5-cmm.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">MANGLE_IDENTIFIER_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -268,7 +268,7 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_LITERAL_TEXT_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">escape_mode</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::compile_literal_text</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Generators::compile_literal_text</span></span>:<br/>Code Generation - <a href="2-cg.html#SP15_1">§15.1</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP6_11_1">§6.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">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">escape_mode</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::compile_literal_text</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Generators::compile_literal_text</span></span>:<br/>Code Generation - <a href="2-cg.html#SP15_1">§15.1</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_12_1">§1.12.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">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">escape_mode</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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">COMPILE_LITERAL_TEXT_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">escape_mode</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -278,12 +278,12 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">DECLARE_ATTRIBUTE_MTID</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">prop_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="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">prop_name</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_ATTRIBUTE_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">prop_name</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_property</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_1">§6.1</a>, <a href="2-vo.html#SP6_12">§6.12</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_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_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="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</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">Generators::declare_property</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_4">§1.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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</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">Generators::declare_attribute</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_attribute</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP5_5">§5.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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_attribute</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_attribute</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_4_1">§1.4.1</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_ATTRIBUTE_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -341,35 +341,35 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<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">DECLARE_CLASS_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super_class</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">END_CLASS_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">class_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::declare_class</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_class</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8_1">§6.8.1</a>, <a href="2-vo.html#SP6_9">§6.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super_class</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::declare_class</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_class</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9_1">§1.9.1</a>, <a href="2-vo.html#SP1_10">§1.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">super_class</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_CLASS_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">super_class</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::end_class</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Generators::end_class</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8_1">§6.8.1</a>, <a href="2-vo.html#SP6_9">§6.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::end_class</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Generators::end_class</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9_1">§1.9.1</a>, <a href="2-vo.html#SP1_10">§1.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">END_CLASS_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">class_name</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">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acount</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_dir</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">END_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::declare_instance</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_5">§6.5</a>, <a href="2-vo.html#SP6_8">§6.8</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">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acount</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_dir</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::declare_instance</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_6">§1.6</a>, <a href="2-vo.html#SP1_9">§1.9</a>, <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acount</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_dir</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">acount</span><span class="plain-syntax">, </span><span class="identifier-syntax">is_dir</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::end_instance</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Generators::end_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_5">§6.5</a>, <a href="2-vo.html#SP6_8">§6.8</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">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">Generators::end_instance</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Generators::end_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_6">§1.6</a>, <a href="2-vo.html#SP1_9">§1.9</a>, <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">END_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">class_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance_name</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">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_VALUE_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_value_instance</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_value_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_value_instance</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_value_instance</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_VALUE_INSTANCE_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">printed_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="identifier-syntax">INT_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">OPTIMISE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::optimise_property_value</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Generators::optimise_property_value</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::optimise_property_value</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Generators::optimise_property_value</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</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">INT_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">rv</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">OPTIMISE_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ASSIGN_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_property</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a>, <a href="2-vo.html#SP6_5">§6.5</a>, <a href="2-vo.html#SP6_8">§6.8</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">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_property</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_6">§1.6</a>, <a href="2-vo.html#SP1_9">§1.9</a>, <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">ASSIGN_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">as_att</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">Generators::assign_mangled_property</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_mangled_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_8_4">§6.8.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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_mangled_property</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_mangled_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_9_4">§1.9.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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</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-cg2.html#SP8" class="function-link"><span class="function-syntax">Generators::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">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::assign_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</span><span class="plain-syntax">, </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">);</span>
|
||||
|
@ -377,7 +377,7 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">PROPERTY_OFFSET_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">property_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::property_offset</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Generators::property_offset</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_11">§6.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">property_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::property_offset</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Generators::property_offset</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_12">§1.12</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">property_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTY_OFFSET_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -388,10 +388,11 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">COMPUTED_GDCFORM</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">LITERAL_TEXT_GDCFORM</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">RAW_GDCFORM</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MANGLED_GDCFORM</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">DECLARE_CONSTANT_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_s</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_constant</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_constant</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_8">§1.8</a>, <a href="2-vc.html#SP1_9">§1.9</a>, <a href="2-vc.html#SP3">§3</a><br/>Vanilla Objects - <a href="2-vo.html#SP5_6">§5.6</a>, <a href="2-vo.html#SP6_1">§6.1</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a><br/>C Object Model - <a href="5-com.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_s</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::declare_constant</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">Generators::declare_constant</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_8">§1.8</a>, <a href="2-vc.html#SP1_9">§1.9</a>, <a href="2-vc.html#SP3">§3</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_4">§1.4</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a><br/>C Object Model - <a href="5-com.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_s</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_CONSTANT_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">const_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">form</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">ifndef_me</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -434,18 +435,18 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<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_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aliased</span><span class="plain-syntax">)</span>
|
||||
<span class="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_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</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">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::begin_array</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">Generators::begin_array</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP6_7">§6.7</a>, <a href="2-vo.html#SP6_8_3">§6.8.3</a>, <a href="2-vo.html#SP6_8_5_1">§6.8.5.1</a>, <a href="2-vo.html#SP6_11">§6.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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_s</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="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::begin_array</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">Generators::begin_array</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_8">§1.8</a>, <a href="2-vo.html#SP1_9_3">§1.9.3</a>, <a href="2-vo.html#SP1_9_5_1">§1.9.5.1</a>, <a href="2-vo.html#SP1_12">§1.12</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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_s</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="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</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">INT_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">rv</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</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">array_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</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">rv</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">Generators::array_entry</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entry</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP6_7">§6.7</a>, <a href="2-vo.html#SP6_8_3">§6.8.3</a>, <a href="2-vo.html#SP6_8_5_1">§6.8.5.1</a>, <a href="2-vo.html#SP6_8_5_1_1">§6.8.5.1.1</a>, <a href="2-vo.html#SP6_11_1">§6.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">Generators::array_entry</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entry</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_8">§1.8</a>, <a href="2-vo.html#SP1_9_3">§1.9.3</a>, <a href="2-vo.html#SP1_9_5_1">§1.9.5.1</a>, <a href="2-vo.html#SP1_9_5_1_1">§1.9.5.1.1</a>, <a href="2-vo.html#SP1_12_1">§1.12.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">-></span><span class="element-syntax">generator</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::array_entries</span><button class="popup" onclick="togglePopup('usagePopup35')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup35">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entries</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="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">-></span><span class="element-syntax">generator</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">Generators::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup36')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup36">Usage of <span class="code-font"><span class="function-syntax">Generators::mangled_array_entry</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP6_7">§6.7</a>, <a href="2-vo.html#SP6_8_3">§6.8.3</a>, <a href="2-vo.html#SP6_11">§6.11</a>, <a href="2-vo.html#SP6_11_2_1">§6.11.2.1</a>, <a href="2-vo.html#SP6_11_2_2">§6.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">Generators::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup36')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup36">Usage of <span class="code-font"><span class="function-syntax">Generators::mangled_array_entry</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_8">§1.8</a>, <a href="2-vo.html#SP1_9_3">§1.9.3</a>, <a href="2-vo.html#SP1_12">§1.12</a>, <a href="2-vo.html#SP1_12_2_1">§1.12.2.1</a>, <a href="2-vo.html#SP1_12_2_2">§1.12.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><a href="2-cg2.html#SP8" class="function-link"><span class="function-syntax">Generators::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">-></span><span class="element-syntax">generator</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>
|
||||
|
@ -455,7 +456,7 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
<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">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">aliased</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">Generators::end_array</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">Generators::end_array</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP6_7">§6.7</a>, <a href="2-vo.html#SP6_8_3">§6.8.3</a>, <a href="2-vo.html#SP6_8_5_1">§6.8.5.1</a>, <a href="2-vo.html#SP6_11">§6.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">segmentation_pos</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">Generators::end_array</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">Generators::end_array</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">§1.5</a>, <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_8">§1.8</a>, <a href="2-vo.html#SP1_9_3">§1.9.3</a>, <a href="2-vo.html#SP1_9_5_1">§1.9.5.1</a>, <a href="2-vo.html#SP1_12">§1.12</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">segmentation_pos</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">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</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="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -139,7 +139,14 @@ be sent <span class="extract"><span class="extract-syntax">END_GENERATION_MTID</
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">var_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">global_variables</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROPERTY_IST:</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">properties</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">PROPERTY_IST:</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTables::symbol_from_frame_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">DEFN_PROP_IFLD</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">assimilated_properties</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">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">unassimilated_properties</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INSTANCE_IST:</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">instances</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">KIND_IST:</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">kinds</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -211,7 +218,7 @@ functions, and calls <a href="2-tvg.html#SP2" class="internal">Vanilla::node</a>
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="2-vc.html#SP3" class="function-link"><span class="function-syntax">VanillaConstants::consolidate</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-vo.html#SP6" class="function-link"><span class="function-syntax">VanillaObjects::consolidate</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-vo.html#SP1" class="function-link"><span class="function-syntax">VanillaObjects::generate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-tvg.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The function <a href="2-tvg.html#SP2" class="internal">Vanilla::node</a> is a sort of handle-any-node function, and is
|
||||
|
@ -291,7 +298,7 @@ generated name. So a splat is not quite generator-independent after all.
|
|||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP3" class="function-link"><span class="function-syntax">Vanilla::splat_matter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">Vanilla::splat_matter</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">Vanilla::splat_matter</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vanilla::splat_matter</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">Vanilla::splat_matter</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</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">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">L</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -264,6 +264,13 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><a href="2-cg2.html#SP10" class="function-link"><span class="function-syntax">Generators::compile_literal_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">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">MANGLED_GDCFORM:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg2.html#SP8" class="function-link"><span class="function-syntax">Generators::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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-cg2.html#SP10" class="function-link"><span class="function-syntax">Generators::compile_literal_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">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">DATA_GDCFORM:</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">DATA_CONST_IFLD</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">-></span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">DATA_CONST_IFLD</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">];</span>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -765,18 +765,30 @@ trick called "stubbing", these being "stub definitions".)
|
|||
</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">I6Target::declare_property</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">I6Target::declare_property</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_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">I6Target::declare_property</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">I6Target::declare_property</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</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">prop_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">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Symbols::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">used</span><span class="plain-syntax">) {</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ATTRIBUTE_MARK_BIT</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP9" 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">predeclarations_I7CGS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><a href="2-cg.html#SP11" 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="string-syntax">"Property %S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">-></span><span class="identifier-syntax">symbol_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP9" 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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP9" 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">code_at_eof_I7CGS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><a href="2-cg.html#SP11" 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="string-syntax">"#ifndef %S; Constant %S = 0; #endif;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP9" 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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ATTRIBUTE_MARK_BIT</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">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXPLICIT_ATTRIBUTE_IANN</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</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">translated</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg2.html#SP12" class="function-link"><span class="function-syntax">Generators::declare_attribute</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Symbols::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Target::declare_attribute</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">I6Target::declare_attribute</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</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">prop_name</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -136,7 +136,7 @@ function togglePopup(material_id) {
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::begin</span></span>:<br/>Final C - <a href="5-fnc.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_5" class="named-paragraph-link"><span class="named-paragraph">Begin the initialiser function</span><span class="named-paragraph-number">1.5</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">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">CObjectModel::end</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::end</span></span>:<br/>Final C - <a href="5-fnc.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
|
||||
|
@ -491,16 +491,24 @@ that references to it will not fail to compile.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::declare_property</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::declare_property</span></span>:<br/><a href="5-com.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</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">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ATTRIBUTE_MARK_BIT</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">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">EXPLICIT_ATTRIBUTE_IANN</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">translated</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">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</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">translated</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">attr</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="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">Inter::Symbols::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cp</span><span class="plain-syntax"> = </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">used</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">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cp</span><span class="plain-syntax"> = </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">attr</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">pname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Metadata::read_optional_textual</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Packages::container</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"^name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pname</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP4" class="function-link"><span class="function-syntax">CObjectModel::define_header_constant_for_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">pname</span><span class="plain-syntax">, </span><span class="identifier-syntax">cp</span><span class="plain-syntax">-></span><span class="element-syntax">id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::declare_attribute</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::declare_attribute</span></span>:<br/><a href="5-com.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</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">prop_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>Property IDs count upwards from 0 in declaration order, though they really
|
||||
|
@ -515,7 +523,7 @@ only need to be unique, so the order is not significant.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">C_property</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="function-syntax">CObjectModel::property_by_name</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::property_by_name</span></span>:<br/><a href="5-com.html#SP1">§1</a>, <a href="5-com.html#SP6">§6</a>, <a href="5-com.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="function-syntax">CObjectModel::property_by_name</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::property_by_name</span></span>:<br/><a href="5-com.html#SP1">§1</a>, <a href="5-com.html#SP6">§6</a>, <a href="5-com.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="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">attr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</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">declared_properties</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cp</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">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
|
@ -670,7 +678,7 @@ the next owner is declared.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::assign_property</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::assign_property</span></span>:<br/><a href="5-com.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</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">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">as_att</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property_owner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</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">current_owner</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</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">C_pv_pair</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pair</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_pv_pair</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pair</span><span class="plain-syntax">-></span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prop</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pair</span><span class="plain-syntax">-></span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
Total memory consumption was 394932K = 386 MB
|
||||
Total memory consumption was 394930K = 386 MB
|
||||
|
||||
60.7% was used for 2000361 objects, in 371224 frames in 300 x 800K = 240000K = 234 MB:
|
||||
60.7% was used for 1999362 objects, in 371224 frames in 300 x 800K = 240000K = 234 MB:
|
||||
|
||||
10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
7.1% text_stream_array 5166 x 100 = 516600 objects, 29094912 bytes
|
||||
4.2% linked_list 30858 objects, 17280480 bytes
|
||||
4.2% linked_list 30859 objects, 17281040 bytes
|
||||
3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes
|
||||
2.5% parse_node 129365 objects, 10349200 bytes
|
||||
1.8% verb_conjugation 160 objects, 7425280 bytes
|
||||
|
@ -63,8 +63,8 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- spatial_data 670 objects, 64320 bytes
|
||||
---- kind_macro_definition 9 objects, 62280 bytes
|
||||
---- booking 860 objects, 61920 bytes
|
||||
---- scenes_rcd_data 1880 objects, 60160 bytes
|
||||
---- actions_rcd_data 1880 objects, 60160 bytes
|
||||
---- scenes_rcd_data 1880 objects, 60160 bytes
|
||||
---- command_grammar 130 objects, 58240 bytes
|
||||
---- kind_constructor 77 objects, 57904 bytes
|
||||
---- table 7 objects, 56672 bytes
|
||||
|
@ -85,7 +85,6 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- production_list 617 objects, 34552 bytes
|
||||
---- regions_data 670 objects, 32160 bytes
|
||||
---- counting_data 670 objects, 32160 bytes
|
||||
---- linked_list_item_array 2 x 1000 = 2000 objects, 32064 bytes
|
||||
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
|
||||
---- property_permission 96 objects, 31488 bytes
|
||||
---- stack_frame_box 304 objects, 29184 bytes
|
||||
|
@ -105,6 +104,7 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
||||
---- to_phrase_request 59 objects, 16048 bytes
|
||||
---- action_name_list_array 1 x 1000 objects, 16032 bytes
|
||||
---- linked_list_item_array 1 x 1000 objects, 16032 bytes
|
||||
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
||||
---- adjective 137 objects, 15344 bytes
|
||||
---- booking_list 407 objects, 13024 bytes
|
||||
|
@ -142,10 +142,10 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- use_option 29 objects, 2552 bytes
|
||||
---- parentage_inference_data 79 objects, 2528 bytes
|
||||
---- part_of_inference_data 79 objects, 2528 bytes
|
||||
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
|
||||
---- equation_symbol 30 objects, 2400 bytes
|
||||
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||
---- inter_construct 30 objects, 2400 bytes
|
||||
---- equation_symbol 30 objects, 2400 bytes
|
||||
---- pipeline_step 16 objects, 2304 bytes
|
||||
---- semver_range 22 objects, 2288 bytes
|
||||
---- scene 1 object, 2096 bytes
|
||||
|
@ -167,8 +167,8 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- runtime_kind_structure 13 objects, 1040 bytes
|
||||
---- quantifier 16 objects, 1024 bytes
|
||||
---- pipeline_stage 21 objects, 1008 bytes
|
||||
---- named_rulebook_outcome 15 objects, 960 bytes
|
||||
---- submodule_identity 30 objects, 960 bytes
|
||||
---- named_rulebook_outcome 15 objects, 960 bytes
|
||||
---- inbuild_requirement 22 objects, 880 bytes
|
||||
---- control_structure_phrase 12 objects, 864 bytes
|
||||
---- cached_understanding 21 objects, 840 bytes
|
||||
|
@ -177,11 +177,11 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- internal_test 15 objects, 720 bytes
|
||||
---- inform_language 6 objects, 672 bytes
|
||||
---- I6T_intervention 8 objects, 640 bytes
|
||||
---- inter_warehouse_room 10 objects, 640 bytes
|
||||
---- relation_guard 5 objects, 640 bytes
|
||||
---- inter_warehouse_room 10 objects, 640 bytes
|
||||
---- inbuild_search_result 15 objects, 600 bytes
|
||||
---- rulebook_outcome 17 objects, 544 bytes
|
||||
---- code_generation 1 object, 528 bytes
|
||||
---- code_generation 1 object, 536 bytes
|
||||
---- small_word_set 11 objects, 528 bytes
|
||||
---- inform_kit 5 objects, 520 bytes
|
||||
---- implication 13 objects, 520 bytes
|
||||
|
@ -189,8 +189,8 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- inference_family 11 objects, 440 bytes
|
||||
---- i6_memory_setting 13 objects, 416 bytes
|
||||
---- module_package 10 objects, 400 bytes
|
||||
---- article_usage 8 objects, 384 bytes
|
||||
---- bp_family 12 objects, 384 bytes
|
||||
---- article_usage 8 objects, 384 bytes
|
||||
---- source_file 5 objects, 360 bytes
|
||||
---- inbuild_genre 7 objects, 336 bytes
|
||||
---- door_dir_notice 5 objects, 320 bytes
|
||||
|
@ -199,20 +199,20 @@ Total memory consumption was 394932K = 386 MB
|
|||
---- tree_inventory 1 object, 312 bytes
|
||||
---- build_step 4 objects, 288 bytes
|
||||
---- up_family 9 objects, 288 bytes
|
||||
---- contents_entry 7 objects, 280 bytes
|
||||
---- door_to_notice 5 objects, 280 bytes
|
||||
---- compilation_unit 5 objects, 280 bytes
|
||||
---- contents_entry 7 objects, 280 bytes
|
||||
---- explicit_bp_data 5 objects, 280 bytes
|
||||
---- door_to_notice 5 objects, 280 bytes
|
||||
---- verb_usage_tier 5 objects, 240 bytes
|
||||
---- adjective_meaning_family 7 objects, 224 bytes
|
||||
---- test_scenario 1 object, 216 bytes
|
||||
---- release_instructions 1 object, 208 bytes
|
||||
---- build_skill 5 objects, 200 bytes
|
||||
---- code_generator 5 objects, 200 bytes
|
||||
---- kit_dependency 4 objects, 192 bytes
|
||||
---- inform_project 1 object, 192 bytes
|
||||
---- plural_dictionary_entry 4 objects, 192 bytes
|
||||
---- kit_dependency 4 objects, 192 bytes
|
||||
---- inform_pipeline 3 objects, 192 bytes
|
||||
---- inform_project 1 object, 192 bytes
|
||||
---- kov_value_stick 3 objects, 168 bytes
|
||||
---- link_instruction 4 objects, 160 bytes
|
||||
---- inter_architecture 4 objects, 160 bytes
|
||||
|
@ -253,8 +253,8 @@ Total memory consumption was 394932K = 386 MB
|
|||
0.4% instance-of-kind counting 1695204 bytes in 1 claim
|
||||
---- compilation workspace for objects 21856 bytes in 25 claims
|
||||
---- lists for type-checking invocations 16000 bytes in 1 claim
|
||||
---- code generation workspace for objects 6096 bytes in 6 claims
|
||||
---- code generation workspace for objects 4128 bytes in 4 claims
|
||||
---- emitter array storage 161792 bytes in 2062 claims
|
||||
|
||||
18.7% was overhead - 75681392 bytes = 73907K = 72 MB
|
||||
18.7% was overhead - 75696856 bytes = 73922K = 72 MB
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
100.0% in inform7 run
|
||||
54.8% in compilation to Inter
|
||||
39.5% in //Sequence::undertake_queued_tasks//
|
||||
3.4% in //MajorNodes::pre_pass//
|
||||
55.1% in compilation to Inter
|
||||
39.8% in //Sequence::undertake_queued_tasks//
|
||||
3.5% in //MajorNodes::pre_pass//
|
||||
2.5% in //MajorNodes::pass_1//
|
||||
2.0% in //RTPhrasebook::compile_entries//
|
||||
1.3% in //ImperativeDefinitions::assess_all//
|
||||
2.1% in //RTPhrasebook::compile_entries//
|
||||
1.4% in //ImperativeDefinitions::assess_all//
|
||||
1.1% in //RTKindConstructors::compile//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
|
@ -16,23 +16,22 @@
|
|||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
1.8% not specifically accounted for
|
||||
43.1% in running Inter pipeline
|
||||
12.4% in step preparation
|
||||
9.6% in inter step 7/16: consolidate-text
|
||||
1.5% not specifically accounted for
|
||||
42.8% in running Inter pipeline
|
||||
12.5% in step preparation
|
||||
9.7% in inter step 7/16: consolidate-text
|
||||
7.9% in inter step 2/16: link
|
||||
6.4% in inter step 16/16: generate inform6 -> auto.inf
|
||||
6.5% in inter step 16/16: generate inform6 -> auto.inf
|
||||
1.5% in inter step 11/16: make-identifiers-unique
|
||||
0.4% in inter step 12/16: reconcile-verbs
|
||||
0.4% in inter step 6/16: assimilate
|
||||
0.2% in inter step 10/16: detect-indirect-calls
|
||||
0.2% in inter step 14/16: eliminate-redundant-operations
|
||||
0.2% in inter step 6/16: assimilate
|
||||
0.2% in inter step 8/16: resolve-external-symbols
|
||||
0.2% in inter step 9/16: inspect-plugs
|
||||
0.1% in inter step 10/16: detect-indirect-calls
|
||||
0.1% in inter step 13/16: eliminate-redundant-labels
|
||||
0.1% in inter step 3/16: merge-template <- none
|
||||
0.1% in inter step 4/16: parse-linked-matter
|
||||
0.1% in inter step 5/16: resolve-conditional-compilation
|
||||
2.6% not specifically accounted for
|
||||
2.4% not specifically accounted for
|
||||
1.6% in supervisor
|
||||
0.3% not specifically accounted for
|
||||
|
|
|
@ -38,8 +38,6 @@ before it is known how they will be used.
|
|||
Submain();
|
||||
];
|
||||
|
||||
Constant FBNA_PROP_NUMBER = MAX_POSITIVE_NUMBER;
|
||||
|
||||
[ INITIALISE_MEMORY_R;
|
||||
#ifdef TARGET_GLULX; VM_PreInitialise(); #Endif;
|
||||
#Ifdef LanguageInitialise; LanguageInitialise(); #Endif;
|
||||
|
|
|
@ -34795,7 +34795,7 @@ package main _plain
|
|||
constant KIT_CONFIGURATION_BITMAP K_typeless_int = 0
|
||||
constant KIT_CONFIGURATION_LOOKMODE K_typeless_int = 2
|
||||
constant I7_VERSION_NUMBER K_typeless_string = "10.1.0"
|
||||
constant I7_FULL_VERSION_NUMBER K_typeless_string = "10.1.0-alpha.1+6T36"
|
||||
constant I7_FULL_VERSION_NUMBER K_typeless_string = "10.1.0-alpha.1+6T37"
|
||||
constant ^virtual_machine K_typeless_string = "C/32d/v1/no-main"
|
||||
constant ^virtual_machine_icon K_typeless_string = "vm_glulx.png"
|
||||
constant ^language_elements_used K_typeless_string = "core, naming, instance counting, glulx external files"
|
||||
|
|
|
@ -49,7 +49,8 @@ typedef struct code_generation {
|
|||
int literal_text_mode;
|
||||
struct linked_list *global_variables;
|
||||
struct linked_list *text_literals;
|
||||
struct linked_list *properties;
|
||||
struct linked_list *assimilated_properties;
|
||||
struct linked_list *unassimilated_properties;
|
||||
struct linked_list *instances;
|
||||
struct linked_list *kinds;
|
||||
|
||||
|
@ -73,7 +74,8 @@ code_generation *CodeGen::new_generation(filename *F, text_stream *T, inter_tree
|
|||
gen->literal_text_mode = REGULAR_LTM;
|
||||
gen->global_variables = NEW_LINKED_LIST(inter_symbol);
|
||||
gen->text_literals = NEW_LINKED_LIST(text_literal_holder);
|
||||
gen->properties = NEW_LINKED_LIST(inter_tree_node);
|
||||
gen->assimilated_properties = NEW_LINKED_LIST(inter_symbol);
|
||||
gen->unassimilated_properties = NEW_LINKED_LIST(inter_symbol);
|
||||
gen->instances = NEW_LINKED_LIST(inter_tree_node);
|
||||
gen->kinds = NEW_LINKED_LIST(inter_tree_node);
|
||||
return gen;
|
||||
|
|
|
@ -199,10 +199,10 @@ void Generators::compile_literal_text(code_generation *gen, text_stream *S, int
|
|||
@e DECLARE_ATTRIBUTE_MTID
|
||||
|
||||
=
|
||||
VOID_METHOD_TYPE(DECLARE_PROPERTY_MTID, code_generator *generator, code_generation *gen, inter_symbol *prop_name, int used)
|
||||
VOID_METHOD_TYPE(DECLARE_PROPERTY_MTID, code_generator *generator, code_generation *gen, inter_symbol *prop_name)
|
||||
VOID_METHOD_TYPE(DECLARE_ATTRIBUTE_MTID, code_generator *generator, code_generation *gen, text_stream *prop_name)
|
||||
void Generators::declare_property(code_generation *gen, inter_symbol *prop_name, int used) {
|
||||
VOID_METHOD_CALL(gen->generator, DECLARE_PROPERTY_MTID, gen, prop_name, used);
|
||||
void Generators::declare_property(code_generation *gen, inter_symbol *prop_name) {
|
||||
VOID_METHOD_CALL(gen->generator, DECLARE_PROPERTY_MTID, gen, prop_name);
|
||||
}
|
||||
void Generators::declare_attribute(code_generation *gen, text_stream *prop_name) {
|
||||
VOID_METHOD_CALL(gen->generator, DECLARE_ATTRIBUTE_MTID, gen, prop_name);
|
||||
|
@ -310,6 +310,7 @@ void Generators::property_offset(code_generation *gen, text_stream *property_nam
|
|||
@d COMPUTED_GDCFORM 2
|
||||
@d LITERAL_TEXT_GDCFORM 3
|
||||
@d RAW_GDCFORM 4
|
||||
@d MANGLED_GDCFORM 5
|
||||
|
||||
=
|
||||
VOID_METHOD_TYPE(DECLARE_CONSTANT_MTID, code_generator *generator, code_generation *gen, text_stream *const_name, inter_symbol *const_s, int form, inter_tree_node *P, text_stream *val, int ifndef_me)
|
||||
|
|
|
@ -51,7 +51,14 @@ void Vanilla::gather_up(inter_tree *I, inter_tree_node *P, void *state) {
|
|||
ADD_TO_LINKED_LIST(var_name, inter_symbol, gen->global_variables);
|
||||
break;
|
||||
}
|
||||
case PROPERTY_IST: ADD_TO_LINKED_LIST(P, inter_tree_node, gen->properties); break;
|
||||
case PROPERTY_IST: {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_PROP_IFLD);
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) == 1)
|
||||
ADD_TO_LINKED_LIST(prop_name, inter_symbol, gen->assimilated_properties);
|
||||
else
|
||||
ADD_TO_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties);
|
||||
break;
|
||||
}
|
||||
case INSTANCE_IST: ADD_TO_LINKED_LIST(P, inter_tree_node, gen->instances); break;
|
||||
case KIND_IST: ADD_TO_LINKED_LIST(P, inter_tree_node, gen->kinds); break;
|
||||
}
|
||||
|
@ -110,7 +117,7 @@ void Vanilla::iterate(inter_tree *I, inter_tree_node *P, void *state) {
|
|||
|
||||
@<Consolidate@> =
|
||||
VanillaConstants::consolidate(gen);
|
||||
VanillaObjects::consolidate(gen);
|
||||
VanillaObjects::generate(gen);
|
||||
|
||||
@ The function //Vanilla::node// is a sort of handle-any-node function, and is
|
||||
the main way we iterate through the Inter tree.
|
||||
|
|
|
@ -156,6 +156,13 @@ void VanillaConstants::definition_value(code_generation *gen, int form, inter_tr
|
|||
Generators::compile_literal_number(gen, 1, FALSE);
|
||||
}
|
||||
break;
|
||||
case MANGLED_GDCFORM:
|
||||
if (Str::len(val) > 0) {
|
||||
Generators::mangle(gen, OUT, val);
|
||||
} else {
|
||||
Generators::compile_literal_number(gen, 1, FALSE);
|
||||
}
|
||||
break;
|
||||
case DATA_GDCFORM: {
|
||||
inter_ti val1 = P->W.data[DATA_CONST_IFLD];
|
||||
inter_ti val2 = P->W.data[DATA_CONST_IFLD + 1];
|
||||
|
|
|
@ -2,164 +2,100 @@
|
|||
|
||||
How the vanilla code generation strategy handles instances, kinds, and properties.
|
||||
|
||||
@
|
||||
@ The object model of objects, kinds, properties and their values is made all
|
||||
at once, towards the end of code generation, when the following function is
|
||||
called exactly once.
|
||||
|
||||
=
|
||||
typedef struct kov_value_stick {
|
||||
struct inter_symbol *prop;
|
||||
struct inter_symbol *kind_name;
|
||||
struct text_stream *identifier;
|
||||
struct inter_tree_node *node;
|
||||
CLASS_DEFINITION
|
||||
} kov_value_stick;
|
||||
|
||||
@h Instances.
|
||||
|
||||
=
|
||||
void VanillaObjects::instance(code_generation *gen, inter_tree_node *P) {
|
||||
inter_symbol *inst_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_INST_IFLD);
|
||||
inter_symbol *inst_kind = InterSymbolsTables::symbol_from_frame_data(P, KIND_INST_IFLD);
|
||||
|
||||
if (Inter::Kind::is_a(inst_kind, object_kind_symbol)) {
|
||||
int c = Inter::Symbols::read_annotation(inst_name, ARROW_COUNT_IANN);
|
||||
if (c < 0) c = 0;
|
||||
int is_dir = Inter::Kind::is_a(inst_kind, direction_kind_symbol);
|
||||
segmentation_pos saved;
|
||||
Generators::declare_instance(gen, Inter::Symbols::name(inst_kind), Inter::Symbols::name(inst_name),
|
||||
Metadata::read_optional_textual(Inter::Packages::container(P), I"^printed_name"), c, is_dir, &saved);
|
||||
VanillaObjects::append(gen, inst_name);
|
||||
inter_node_list *FL =
|
||||
Inode::ID_to_frame_list(P,
|
||||
Inter::Instance::properties_list(inst_name));
|
||||
VanillaObjects::plist(gen, FL);
|
||||
Generators::end_instance(gen, Inter::Symbols::name(inst_kind), Inter::Symbols::name(inst_name), saved);
|
||||
} else {
|
||||
inter_ti val1 = P->W.data[VAL1_INST_IFLD];
|
||||
inter_ti val2 = P->W.data[VAL2_INST_IFLD];
|
||||
int defined = TRUE;
|
||||
if (val1 == UNDEF_IVAL) defined = FALSE;
|
||||
TEMPORARY_TEXT(val)
|
||||
if (defined) WRITE_TO(val, "%d", val2);
|
||||
Generators::declare_value_instance(gen, Inter::Symbols::name(inst_name),
|
||||
Metadata::read_optional_textual(Inter::Packages::container(P), I"^printed_name"), val);
|
||||
DISCARD_TEXT(val)
|
||||
}
|
||||
}
|
||||
|
||||
void VanillaObjects::plist(code_generation *gen, inter_node_list *FL) {
|
||||
if (FL == NULL) internal_error("no properties list");
|
||||
inter_tree_node *X;
|
||||
LOOP_THROUGH_INTER_NODE_LIST(X, FL) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(X, PROP_PVAL_IFLD);
|
||||
if (prop_name == NULL) internal_error("no property");
|
||||
text_stream *call_it = Inter::Symbols::name(prop_name);
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT)) {
|
||||
if ((X->W.data[DVAL1_PVAL_IFLD] == LITERAL_IVAL) &&
|
||||
(X->W.data[DVAL2_PVAL_IFLD] == 0)) {
|
||||
Generators::assign_property(gen, call_it, I"0", TRUE);
|
||||
} else {
|
||||
Generators::assign_property(gen, call_it, I"1", TRUE);
|
||||
}
|
||||
} else {
|
||||
TEMPORARY_TEXT(OUT)
|
||||
CodeGen::select_temporary(gen, OUT);
|
||||
if (Generators::optimise_property_value(gen, prop_name, X) == FALSE) {
|
||||
CodeGen::pair(gen, X,
|
||||
X->W.data[DVAL1_PVAL_IFLD], X->W.data[DVAL2_PVAL_IFLD]);
|
||||
}
|
||||
CodeGen::deselect_temporary(gen);
|
||||
Generators::assign_property(gen, call_it, OUT, FALSE);
|
||||
DISCARD_TEXT(OUT)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VanillaObjects::append(code_generation *gen, inter_symbol *symb) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
void VanillaObjects::generate(code_generation *gen) {
|
||||
inter_tree *I = gen->from;
|
||||
text_stream *S = Inter::Symbols::read_annotation_t(symb, I, APPEND_IANN);
|
||||
if (Str::len(S) == 0) return;
|
||||
WRITE(" ");
|
||||
Vanilla::splat_matter(OUT, I, S);
|
||||
|
||||
inter_symbol **kinds_in_source_order = NULL;
|
||||
inter_symbol **kinds_in_declaration_order = NULL;
|
||||
@<Make a list of kinds in source order@>;
|
||||
@<Make a list of kinds in declaration order@>;
|
||||
|
||||
inter_symbol **instances_in_declaration_order = NULL;
|
||||
@<Make a list of instances in declaration order@>;
|
||||
|
||||
if (LinkedLists::len(gen->unassimilated_properties) > 0) {
|
||||
@<Declare and allocate properties@>;
|
||||
@<Compile the property numberspace forcer@>;
|
||||
@<Write Value Property Holder objects for each kind of value instance@>;
|
||||
}
|
||||
|
||||
@<Annotate kinds of object with a sequence counter@>;
|
||||
@<Write the KindHierarchy array@>;
|
||||
@<Write an I6 Class definition for each kind of object@>;
|
||||
@<Write an I6 Object definition for each object instance@>;
|
||||
@<Write the property metadata array@>;
|
||||
}
|
||||
|
||||
@<Make a list of kinds in source order@> =
|
||||
if (LinkedLists::len(gen->kinds) > 0) {
|
||||
kinds_in_source_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->kinds), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->kinds) {
|
||||
inter_symbol *kind_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_KIND_IFLD);
|
||||
kinds_in_source_order[i++] = kind_name;
|
||||
}
|
||||
qsort(kinds_in_source_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols);
|
||||
}
|
||||
|
||||
@h Representing instances in I6.
|
||||
Partly for historical reasons, partly to squeeze performance out of the
|
||||
virtual machines used in traditional parser IF, the I6 run-time
|
||||
implementation of instances and their properties is complicated.
|
||||
@<Make a list of kinds in declaration order@> =
|
||||
if (LinkedLists::len(gen->kinds) > 0) {
|
||||
kinds_in_declaration_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->kinds), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->kinds) {
|
||||
inter_symbol *kind_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_KIND_IFLD);
|
||||
kinds_in_declaration_order[i++] = kind_name;
|
||||
}
|
||||
qsort(kinds_in_declaration_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols_decl);
|
||||
}
|
||||
|
||||
The main complication is that there are two sorts of instance: objects,
|
||||
such as doors and people, and everything else, such as scenes. The two
|
||||
sorts are handled equally in Inter, but have completely different run-time
|
||||
representations in I6:
|
||||
@<Make a list of instances in declaration order@> =
|
||||
if (LinkedLists::len(gen->instances) > 0) {
|
||||
instances_in_declaration_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->instances), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i=0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->instances) {
|
||||
inter_symbol *inst_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_INST_IFLD);
|
||||
instances_in_declaration_order[i++] = inst_name;
|
||||
}
|
||||
qsort(instances_in_declaration_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols_decl);
|
||||
}
|
||||
|
||||
(a) "Object instances" are instances of a kind which is a subkind, perhaps
|
||||
indirectly, of "object". These are stored as I6 objects, and the I6 classes
|
||||
of these objects correspond exactly to their I7 kinds (except that the kind
|
||||
"object" itself is mapped to the I6 class "Class").
|
||||
@<Declare and allocate properties@> =
|
||||
inter_symbol *first_either_or_not_an_attribute = NULL;
|
||||
int attribute_slots_used = 0;
|
||||
|
||||
(b) "Value instances" are instances of kinds which are not objects but can
|
||||
nevertheless have properties. The scene "entire game" is a value instance; the
|
||||
number 27 is not. Value instances are stored as enumerated constants. For
|
||||
example, if there are scenes called "entire game", "Overture" and "Grand
|
||||
Finale", then these are stored as the constants 1, 2, 3; and I6 constants are
|
||||
defined to represent them.
|
||||
inter_symbol *prop_name;
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->assimilated_properties)
|
||||
@<Consider this property for attribute allocation@>;
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties)
|
||||
@<Consider this property for attribute allocation@>;
|
||||
|
||||
@h Representing properties in I6.
|
||||
Both sorts of instance can have properties; for example:
|
||||
if (first_either_or_not_an_attribute == NULL)
|
||||
Generators::declare_constant(gen, I"FBNA_PROP_NUMBER", NULL, MANGLED_GDCFORM,
|
||||
NULL, I"MAX_POSITIVE_NUMBER", FALSE);
|
||||
else
|
||||
Generators::declare_constant(gen, I"FBNA_PROP_NUMBER", NULL, MANGLED_GDCFORM,
|
||||
NULL, Inter::Symbols::name(first_either_or_not_an_attribute), FALSE);
|
||||
|
||||
>> A supporter has a number called carrying capacity.
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->assimilated_properties)
|
||||
Generators::declare_property(gen, prop_name);
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties)
|
||||
Generators::declare_property(gen, prop_name);
|
||||
|
||||
>> A scene has a number called completion score.
|
||||
|
||||
allows a property to be held by object instances (supporters) and value
|
||||
instances (scenes). To the writer of I7 source text, no distinction between
|
||||
these cases is visible, and the same is true of Inter code.
|
||||
|
||||
How to store these at run-time is not so straightforward. Speed and
|
||||
compactness are unusually important here, and constraints imposed by the
|
||||
virtual machine targeted by I6 add further complications.
|
||||
|
||||
(a) Properties of object instances are stored as either I6 properties or I6
|
||||
attributes of their I6 objects. As far as possible, this is a direct mapping
|
||||
from I7 instances and kinds onto I6 objects and classes. It is a little
|
||||
bulkier in memory than using flat arrays, but the Glulx and Z-machine virtual
|
||||
machines offer a very rapid lookup operation. Thus "the carrying capacity of
|
||||
the player" can be compiled to the I6 expression |player.capacity|, which
|
||||
compiles to a single short call to the I6 veneer -- and one which many
|
||||
interpreters today have optimised out as a basic operation, taking only a
|
||||
single VM clock cycle.
|
||||
|
||||
(b) The properties of value instances are stored in flat arrays called
|
||||
"sticks", with each property having its own stick. For example, the property
|
||||
"recurring" for a scene would have a stick holding three values, one each for
|
||||
the three scenes. Sticks have the same run-time format as table columns and
|
||||
this is not a coincidence, because some kinds of value instances are created
|
||||
by table in I7, and this lets us use the table as a ready-made set of sticks.
|
||||
But now we don't have run-time lookup mechanisms already provided for us, so
|
||||
we will need to set up some metadata structures to make it possible to seek
|
||||
property values for value instances quickly.
|
||||
|
||||
In practice, property access is slightly faster for object instances, and
|
||||
property storage is slightly more compact for value instances, which is
|
||||
probably the right bargain.
|
||||
|
||||
@h Properties.
|
||||
Properties in I7 are of two sorts: either-or, which behave adjectivally,
|
||||
such as "open"; and value, which behave as nouns, such as "carrying capacity".
|
||||
We can distinguish these because the I7 compiler annotates the property name
|
||||
symbols with the |EITHER_OR_IANN| flag. It also always gives either-or
|
||||
properties the kind |K_truth_state|, but note that a few value properties
|
||||
also have this kind, so the annotation is the only way to be sure.
|
||||
|
||||
Some either-or properties of object instances can be stored as I6
|
||||
"attributes". This is memory-efficient and fast at run-time: but only a
|
||||
limited number can be stored this way. Here we choose which.
|
||||
|
||||
=
|
||||
void VanillaObjects::property(inter_tree *I, inter_symbol *prop_name, code_generation *gen, int *FBNA_found, int *attribute_slots_used) {
|
||||
if (prop_name == NULL) internal_error("bad property");
|
||||
@<Consider this property for attribute allocation@> =
|
||||
if (Inter::Symbols::read_annotation(prop_name, EITHER_OR_IANN) >= 0) {
|
||||
int translated = FALSE;
|
||||
if (Inter::Symbols::read_annotation(prop_name, EXPLICIT_ATTRIBUTE_IANN) >= 0) translated = TRUE;
|
||||
|
@ -169,16 +105,19 @@ void VanillaObjects::property(inter_tree *I, inter_symbol *prop_name, code_gener
|
|||
@<Any either/or property which can belong to a value instance is ineligible@>;
|
||||
@<An either/or property translated to an attribute declared in the I6 template must be chosen@>;
|
||||
@<Otherwise give away attribute slots on a first-come-first-served basis@>;
|
||||
if (make_attribute == TRUE) Inter::Symbols::set_flag(prop_name, ATTRIBUTE_MARK_BIT);
|
||||
@<Check against the I7 compiler's beliefs@>;
|
||||
|
||||
if (make_attribute) {
|
||||
@<Declare as an I6 attribute@>;
|
||||
Inter::Symbols::set_flag(prop_name, ATTRIBUTE_MARK_BIT);
|
||||
// if ((Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) ||
|
||||
// (translated == FALSE))
|
||||
// Generators::declare_attribute(gen, Inter::Symbols::name(prop_name));
|
||||
} else {
|
||||
@<Worry about the FBNA@>;
|
||||
Inter::Symbols::clear_flag(prop_name, ATTRIBUTE_MARK_BIT);
|
||||
if (first_either_or_not_an_attribute == NULL)
|
||||
first_either_or_not_an_attribute = prop_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ The dodge of using an attribute to store an either-or property won't work
|
||||
for properties of value instances, because then the value-property-holder
|
||||
|
@ -230,7 +169,7 @@ to be frequently used.
|
|||
|
||||
@<Otherwise give away attribute slots on a first-come-first-served basis@> =
|
||||
if (make_attribute == NOT_APPLICABLE) {
|
||||
if (*attribute_slots_used++ < ATTRIBUTE_SLOTS_TO_GIVE_AWAY)
|
||||
if (attribute_slots_used++ < ATTRIBUTE_SLOTS_TO_GIVE_AWAY)
|
||||
make_attribute = TRUE;
|
||||
else
|
||||
make_attribute = FALSE;
|
||||
|
@ -250,22 +189,6 @@ check that here. (It tells us by marking the property name with the
|
|||
internal_error("attribute allocation dispute");
|
||||
}
|
||||
|
||||
@ A curiosity of I6 is that attributes must be declared before use, whereas
|
||||
properties need not be. We generate suitable |Attribute| statements here.
|
||||
Note that if the property has been translated onto an existing I6 name, then
|
||||
we assume that's the name of an attribute already declared (for example
|
||||
in the I6 template, or some extension), and we therefore do nothing.
|
||||
|
||||
@<Declare as an I6 attribute@> =
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) {
|
||||
text_stream *A = Inter::Symbols::get_translate(prop_name);
|
||||
if (A == NULL) A = Inter::Symbols::name(prop_name);
|
||||
Generators::declare_attribute(gen, A);
|
||||
} else {
|
||||
if (translated == FALSE)
|
||||
Generators::declare_attribute(gen, Inter::Symbols::name(prop_name));
|
||||
}
|
||||
|
||||
@ The weak point in our scheme for making some either/or properties into
|
||||
Attributes is that run-time code is going to need a fast way to determine
|
||||
which, since they have to be accessed differently. We rely on the facts that
|
||||
|
@ -284,156 +207,13 @@ This cutoff value |F| is customarily called FBNA, the "first boolean not
|
|||
an attribute". (Perhaps she ought to be called FEONA.) The following
|
||||
compiles an I6 constant for this value.
|
||||
|
||||
@<Worry about the FBNA@> =
|
||||
if (*FBNA_found == FALSE) {
|
||||
*FBNA_found = TRUE;
|
||||
TEMPORARY_TEXT(val)
|
||||
Generators::mangle(gen, val, Inter::Symbols::name(prop_name));
|
||||
Generators::declare_constant(gen, I"FBNA_PROP_NUMBER", NULL, RAW_GDCFORM, NULL, val, FALSE);
|
||||
DISCARD_TEXT(val)
|
||||
}
|
||||
|
||||
@ It's unlikely, but just possible, that no FBNAs ever exist, so after the
|
||||
above has been tried on all properties:
|
||||
|
||||
=
|
||||
void VanillaObjects::consolidate(code_generation *gen) {
|
||||
inter_tree *I = gen->from;
|
||||
inter_symbol **all_props_in_source_order = NULL;
|
||||
inter_symbol **props_in_source_order = NULL;
|
||||
int no_unassimilated_properties = 0;
|
||||
@<Make a list of properties in source order@>;
|
||||
@<Compile the property numberspace forcer@>;
|
||||
|
||||
inter_symbol **kinds_in_source_order = NULL;
|
||||
inter_symbol **kinds_in_declaration_order = NULL;
|
||||
@<Make a list of kinds in source order@>;
|
||||
|
||||
inter_symbol **instances_in_declaration_order = NULL;
|
||||
@<Make a list of instances in declaration order@>;
|
||||
|
||||
if (no_unassimilated_properties > 0) @<Write Value Property Holder objects for each kind of value instance@>;
|
||||
@<Make a list of kinds in declaration order@>;
|
||||
@<Annotate kinds of object with a sequence counter@>;
|
||||
@<Write the KindHierarchy array@>;
|
||||
@<Write an I6 Class definition for each kind of object@>;
|
||||
@<Write an I6 Object definition for each object instance@>;
|
||||
@<Write the property metadata array@>;
|
||||
|
||||
@<Stub the properties@>;
|
||||
}
|
||||
|
||||
@<Make a list of properties in source order@> =
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->properties) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_PROP_IFLD);
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) != 1)
|
||||
no_unassimilated_properties++;
|
||||
}
|
||||
|
||||
if (no_unassimilated_properties > 0) {
|
||||
int FBNA_found = FALSE;
|
||||
int attribute_slots_used = 0;
|
||||
all_props_in_source_order = (inter_symbol **)
|
||||
(Memory::calloc(no_unassimilated_properties, sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int c = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->properties) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_PROP_IFLD);
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) != 1)
|
||||
all_props_in_source_order[c++] = prop_name;
|
||||
else
|
||||
VanillaObjects::property(I, prop_name, gen, &FBNA_found, &attribute_slots_used);
|
||||
}
|
||||
qsort(all_props_in_source_order, (size_t) no_unassimilated_properties, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols);
|
||||
for (int p=0; p<no_unassimilated_properties; p++) {
|
||||
inter_symbol *prop_name = all_props_in_source_order[p];
|
||||
VanillaObjects::property(I, prop_name, gen, &FBNA_found, &attribute_slots_used);
|
||||
}
|
||||
if (FBNA_found == FALSE)
|
||||
Generators::declare_constant(gen, I"FBNA_PROP_NUMBER", NULL, RAW_GDCFORM, NULL, I"MAX_POSITIVE_NUMBER", FALSE);
|
||||
}
|
||||
|
||||
if (no_unassimilated_properties > 0) {
|
||||
props_in_source_order = (inter_symbol **)
|
||||
(Memory::calloc(no_unassimilated_properties, sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int c = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->properties) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_PROP_IFLD);
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) != 1)
|
||||
props_in_source_order[c++] = prop_name;
|
||||
}
|
||||
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->properties) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_PROP_IFLD);
|
||||
if ((Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) == 1) &&
|
||||
(Inter::Symbols::read_annotation(prop_name, ATTRIBUTE_IANN) != 1)) {
|
||||
Generators::declare_property(gen, prop_name, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@<Make a list of kinds in source order@> =
|
||||
if (LinkedLists::len(gen->kinds) == 0) return;
|
||||
|
||||
kinds_in_source_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->kinds), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->kinds) {
|
||||
inter_symbol *kind_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_KIND_IFLD);
|
||||
kinds_in_source_order[i++] = kind_name;
|
||||
}
|
||||
qsort(kinds_in_source_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols);
|
||||
|
||||
@<Make a list of kinds in declaration order@> =
|
||||
kinds_in_declaration_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->kinds), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i = 0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->kinds) {
|
||||
inter_symbol *kind_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_KIND_IFLD);
|
||||
kinds_in_declaration_order[i++] = kind_name;
|
||||
}
|
||||
qsort(kinds_in_declaration_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols_decl);
|
||||
|
||||
@<Make a list of instances in declaration order@> =
|
||||
if (LinkedLists::len(gen->instances) > 0) {
|
||||
instances_in_declaration_order = (inter_symbol **)
|
||||
(Memory::calloc(LinkedLists::len(gen->instances), sizeof(inter_symbol *), CODE_GENERATION_MREASON));
|
||||
int i=0;
|
||||
inter_tree_node *P;
|
||||
LOOP_OVER_LINKED_LIST(P, inter_tree_node, gen->instances) {
|
||||
inter_symbol *inst_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_INST_IFLD);
|
||||
instances_in_declaration_order[i++] = inst_name;
|
||||
}
|
||||
qsort(instances_in_declaration_order, (size_t) i, sizeof(inter_symbol *),
|
||||
VanillaObjects::compare_kind_symbols_decl);
|
||||
}
|
||||
|
||||
@ But there's a snag. The above assumes that property values will have the
|
||||
same ordering at run-time as their definition order here, but that isn't
|
||||
necessarily true. The run-time ordering depends on how early in the I6
|
||||
source code they appear, and that in turn depends on which objects have
|
||||
which properties, and so on -- nothing we can rely on.
|
||||
|
||||
We finesse this by creating the following spurious object before the
|
||||
class hierarchy and object tree are created: its properties are therefore
|
||||
all new creations, and since we declare them in I7 creation order, they
|
||||
are now allocated I6 property numbers in a sequence matching this. (We
|
||||
don't care about the numbering of non-either/or properties, so we don't
|
||||
bother to force them.)
|
||||
@
|
||||
|
||||
@<Compile the property numberspace forcer@> =
|
||||
if (no_unassimilated_properties > 0) {
|
||||
segmentation_pos saved;
|
||||
Generators::declare_instance(gen, I"Object", I"property_numberspace_forcer", NULL, -1, FALSE, &saved);
|
||||
for (int p=0; p<no_unassimilated_properties; p++) {
|
||||
inter_symbol *prop_name = props_in_source_order[p];
|
||||
inter_symbol *prop_name;
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties) {
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT) == FALSE) {
|
||||
inter_symbol *kind_name = Inter::Property::kind_of(prop_name);
|
||||
if (kind_name == truth_state_kind_symbol) {
|
||||
|
@ -442,7 +222,6 @@ bother to force them.)
|
|||
}
|
||||
}
|
||||
Generators::end_instance(gen, I"Object", I"property_numberspace_forcer", saved);
|
||||
}
|
||||
|
||||
@<Annotate kinds of object with a sequence counter@> =
|
||||
inter_ti c = 1;
|
||||
|
@ -535,10 +314,9 @@ take lightly in the Z-machine. But speed and flexibility are worth more.
|
|||
WRITE_TO(N, "%d", Inter::Kind::instance_count(kind_name));
|
||||
Generators::assign_property(gen, I"value_range", N, FALSE);
|
||||
DISCARD_TEXT(N)
|
||||
for (int p=0; p<no_unassimilated_properties; p++) {
|
||||
inter_symbol *prop_name = props_in_source_order[p];
|
||||
inter_symbol *prop_name;
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties)
|
||||
CodeGen::unmark(prop_name);
|
||||
}
|
||||
inter_node_list *FL =
|
||||
Inter::Warehouse::get_frame_list(InterTree::warehouse(I), Inter::Kind::permissions_list(kind_name));
|
||||
@<Work through this frame list of permissions@>;
|
||||
|
@ -767,12 +545,12 @@ The dummy value |-1| means that the relevant property has no metadata record,
|
|||
though this won't happen for any property created by I7 source text.
|
||||
|
||||
@<Write the property metadata array@> =
|
||||
if (no_unassimilated_properties > 0) {
|
||||
if (LinkedLists::len(gen->unassimilated_properties) > 0) {
|
||||
segmentation_pos saved;
|
||||
Generators::begin_array(gen, I"property_metadata", NULL, NULL, WORD_ARRAY_FORMAT, &saved);
|
||||
int pos = 0;
|
||||
for (int p=0; p<no_unassimilated_properties; p++) {
|
||||
inter_symbol *prop_name = props_in_source_order[p];
|
||||
inter_symbol *prop_name;
|
||||
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties) {
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT))
|
||||
Generators::property_offset(gen, Inter::Symbols::name(prop_name), pos, TRUE);
|
||||
else
|
||||
|
@ -813,8 +591,8 @@ number of objects, but we can live with that. $P$ does not in practice rise
|
|||
linearly with the size of the source text, even though $N$ does.
|
||||
|
||||
@<Write a list of kinds or objects which are permitted to have this property@> =
|
||||
for (int e=0; e<no_unassimilated_properties; e++) {
|
||||
inter_symbol *eprop_name = props_in_source_order[e];
|
||||
inter_symbol *eprop_name;
|
||||
LOOP_OVER_LINKED_LIST(eprop_name, inter_symbol, gen->unassimilated_properties) {
|
||||
if (Str::eq(Inter::Symbols::name(eprop_name), Inter::Symbols::name(prop_name))) {
|
||||
inter_node_list *EVL =
|
||||
Inter::Warehouse::get_frame_list(InterTree::warehouse(I),
|
||||
|
@ -875,16 +653,6 @@ linearly with the size of the source text, even though $N$ does.
|
|||
}
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
@<Stub the properties@> =
|
||||
for (int p=0; p<no_unassimilated_properties; p++) {
|
||||
inter_symbol *prop_name = props_in_source_order[p];
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) != 1) {
|
||||
Generators::declare_property(gen, prop_name, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@ =
|
||||
int VanillaObjects::pnum(inter_symbol *prop_name) {
|
||||
int N = Inter::Symbols::read_annotation(prop_name, SOURCE_ORDER_IANN);
|
||||
|
@ -969,3 +737,161 @@ inter_ti VanillaObjects::kind_of_object_count(inter_symbol *kind_name) {
|
|||
if (N >= 0) return (inter_ti) N;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
=
|
||||
typedef struct kov_value_stick {
|
||||
struct inter_symbol *prop;
|
||||
struct inter_symbol *kind_name;
|
||||
struct text_stream *identifier;
|
||||
struct inter_tree_node *node;
|
||||
CLASS_DEFINITION
|
||||
} kov_value_stick;
|
||||
|
||||
@h Instances.
|
||||
|
||||
=
|
||||
void VanillaObjects::instance(code_generation *gen, inter_tree_node *P) {
|
||||
inter_symbol *inst_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_INST_IFLD);
|
||||
inter_symbol *inst_kind = InterSymbolsTables::symbol_from_frame_data(P, KIND_INST_IFLD);
|
||||
|
||||
if (Inter::Kind::is_a(inst_kind, object_kind_symbol)) {
|
||||
int c = Inter::Symbols::read_annotation(inst_name, ARROW_COUNT_IANN);
|
||||
if (c < 0) c = 0;
|
||||
int is_dir = Inter::Kind::is_a(inst_kind, direction_kind_symbol);
|
||||
segmentation_pos saved;
|
||||
Generators::declare_instance(gen, Inter::Symbols::name(inst_kind), Inter::Symbols::name(inst_name),
|
||||
Metadata::read_optional_textual(Inter::Packages::container(P), I"^printed_name"), c, is_dir, &saved);
|
||||
VanillaObjects::append(gen, inst_name);
|
||||
inter_node_list *FL =
|
||||
Inode::ID_to_frame_list(P,
|
||||
Inter::Instance::properties_list(inst_name));
|
||||
VanillaObjects::plist(gen, FL);
|
||||
Generators::end_instance(gen, Inter::Symbols::name(inst_kind), Inter::Symbols::name(inst_name), saved);
|
||||
} else {
|
||||
inter_ti val1 = P->W.data[VAL1_INST_IFLD];
|
||||
inter_ti val2 = P->W.data[VAL2_INST_IFLD];
|
||||
int defined = TRUE;
|
||||
if (val1 == UNDEF_IVAL) defined = FALSE;
|
||||
TEMPORARY_TEXT(val)
|
||||
if (defined) WRITE_TO(val, "%d", val2);
|
||||
Generators::declare_value_instance(gen, Inter::Symbols::name(inst_name),
|
||||
Metadata::read_optional_textual(Inter::Packages::container(P), I"^printed_name"), val);
|
||||
DISCARD_TEXT(val)
|
||||
}
|
||||
}
|
||||
|
||||
void VanillaObjects::plist(code_generation *gen, inter_node_list *FL) {
|
||||
if (FL == NULL) internal_error("no properties list");
|
||||
inter_tree_node *X;
|
||||
LOOP_THROUGH_INTER_NODE_LIST(X, FL) {
|
||||
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(X, PROP_PVAL_IFLD);
|
||||
if (prop_name == NULL) internal_error("no property");
|
||||
text_stream *call_it = Inter::Symbols::name(prop_name);
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT)) {
|
||||
if ((X->W.data[DVAL1_PVAL_IFLD] == LITERAL_IVAL) &&
|
||||
(X->W.data[DVAL2_PVAL_IFLD] == 0)) {
|
||||
Generators::assign_property(gen, call_it, I"0", TRUE);
|
||||
} else {
|
||||
Generators::assign_property(gen, call_it, I"1", TRUE);
|
||||
}
|
||||
} else {
|
||||
TEMPORARY_TEXT(OUT)
|
||||
CodeGen::select_temporary(gen, OUT);
|
||||
if (Generators::optimise_property_value(gen, prop_name, X) == FALSE) {
|
||||
CodeGen::pair(gen, X,
|
||||
X->W.data[DVAL1_PVAL_IFLD], X->W.data[DVAL2_PVAL_IFLD]);
|
||||
}
|
||||
CodeGen::deselect_temporary(gen);
|
||||
Generators::assign_property(gen, call_it, OUT, FALSE);
|
||||
DISCARD_TEXT(OUT)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VanillaObjects::append(code_generation *gen, inter_symbol *symb) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
inter_tree *I = gen->from;
|
||||
text_stream *S = Inter::Symbols::read_annotation_t(symb, I, APPEND_IANN);
|
||||
if (Str::len(S) == 0) return;
|
||||
WRITE(" ");
|
||||
Vanilla::splat_matter(OUT, I, S);
|
||||
}
|
||||
|
||||
|
||||
@h Representing instances in I6.
|
||||
Partly for historical reasons, partly to squeeze performance out of the
|
||||
virtual machines used in traditional parser IF, the I6 run-time
|
||||
implementation of instances and their properties is complicated.
|
||||
|
||||
The main complication is that there are two sorts of instance: objects,
|
||||
such as doors and people, and everything else, such as scenes. The two
|
||||
sorts are handled equally in Inter, but have completely different run-time
|
||||
representations in I6:
|
||||
|
||||
(a) "Object instances" are instances of a kind which is a subkind, perhaps
|
||||
indirectly, of "object". These are stored as I6 objects, and the I6 classes
|
||||
of these objects correspond exactly to their I7 kinds (except that the kind
|
||||
"object" itself is mapped to the I6 class "Class").
|
||||
|
||||
(b) "Value instances" are instances of kinds which are not objects but can
|
||||
nevertheless have properties. The scene "entire game" is a value instance; the
|
||||
number 27 is not. Value instances are stored as enumerated constants. For
|
||||
example, if there are scenes called "entire game", "Overture" and "Grand
|
||||
Finale", then these are stored as the constants 1, 2, 3; and I6 constants are
|
||||
defined to represent them.
|
||||
|
||||
@h Representing properties in I6.
|
||||
Both sorts of instance can have properties; for example:
|
||||
|
||||
>> A supporter has a number called carrying capacity.
|
||||
|
||||
>> A scene has a number called completion score.
|
||||
|
||||
allows a property to be held by object instances (supporters) and value
|
||||
instances (scenes). To the writer of I7 source text, no distinction between
|
||||
these cases is visible, and the same is true of Inter code.
|
||||
|
||||
How to store these at run-time is not so straightforward. Speed and
|
||||
compactness are unusually important here, and constraints imposed by the
|
||||
virtual machine targeted by I6 add further complications.
|
||||
|
||||
(a) Properties of object instances are stored as either I6 properties or I6
|
||||
attributes of their I6 objects. As far as possible, this is a direct mapping
|
||||
from I7 instances and kinds onto I6 objects and classes. It is a little
|
||||
bulkier in memory than using flat arrays, but the Glulx and Z-machine virtual
|
||||
machines offer a very rapid lookup operation. Thus "the carrying capacity of
|
||||
the player" can be compiled to the I6 expression |player.capacity|, which
|
||||
compiles to a single short call to the I6 veneer -- and one which many
|
||||
interpreters today have optimised out as a basic operation, taking only a
|
||||
single VM clock cycle.
|
||||
|
||||
(b) The properties of value instances are stored in flat arrays called
|
||||
"sticks", with each property having its own stick. For example, the property
|
||||
"recurring" for a scene would have a stick holding three values, one each for
|
||||
the three scenes. Sticks have the same run-time format as table columns and
|
||||
this is not a coincidence, because some kinds of value instances are created
|
||||
by table in I7, and this lets us use the table as a ready-made set of sticks.
|
||||
But now we don't have run-time lookup mechanisms already provided for us, so
|
||||
we will need to set up some metadata structures to make it possible to seek
|
||||
property values for value instances quickly.
|
||||
|
||||
In practice, property access is slightly faster for object instances, and
|
||||
property storage is slightly more compact for value instances, which is
|
||||
probably the right bargain.
|
||||
|
||||
@h Properties.
|
||||
Properties in I7 are of two sorts: either-or, which behave adjectivally,
|
||||
such as "open"; and value, which behave as nouns, such as "carrying capacity".
|
||||
We can distinguish these because the I7 compiler annotates the property name
|
||||
symbols with the |EITHER_OR_IANN| flag. It also always gives either-or
|
||||
properties the kind |K_truth_state|, but note that a few value properties
|
||||
also have this kind, so the annotation is the only way to be sure.
|
||||
|
||||
Some either-or properties of object instances can be stored as I6
|
||||
"attributes". This is memory-efficient and fast at run-time: but only a
|
||||
limited number can be stored this way. Here we choose which.
|
||||
|
||||
=
|
||||
|
||||
|
|
|
@ -624,18 +624,30 @@ property names which don't exist as constant symbols with the harmless value
|
|||
trick called "stubbing", these being "stub definitions".)
|
||||
|
||||
=
|
||||
void I6Target::declare_property(code_generator *cgt, code_generation *gen,
|
||||
inter_symbol *prop_name, int used) {
|
||||
void I6Target::declare_property(code_generator *cgt, code_generation *gen, inter_symbol *prop_name) {
|
||||
|
||||
text_stream *name = Inter::Symbols::name(prop_name);
|
||||
if (used) {
|
||||
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) == 1) {
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT) == 0) {
|
||||
segmentation_pos saved = CodeGen::select(gen, predeclarations_I7CGS);
|
||||
WRITE_TO(CodeGen::current(gen), "Property %S;\n", prop_name->symbol_name);
|
||||
CodeGen::deselect(gen, saved);
|
||||
}
|
||||
} else {
|
||||
segmentation_pos saved = CodeGen::select(gen, code_at_eof_I7CGS);
|
||||
WRITE_TO(CodeGen::current(gen), "#ifndef %S; Constant %S = 0; #endif;\n", name, name);
|
||||
CodeGen::deselect(gen, saved);
|
||||
}
|
||||
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT)) {
|
||||
int translated = FALSE;
|
||||
if (Inter::Symbols::read_annotation(prop_name, EXPLICIT_ATTRIBUTE_IANN) >= 0) translated = TRUE;
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) translated = TRUE;
|
||||
if ((Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) ||
|
||||
(translated == FALSE))
|
||||
Generators::declare_attribute(gen, Inter::Symbols::name(prop_name));
|
||||
}
|
||||
}
|
||||
|
||||
void I6Target::declare_attribute(code_generator *cgt, code_generation *gen, text_stream *prop_name) {
|
||||
|
|
|
@ -62,7 +62,7 @@ void CObjectModel::initialise_data(code_generation *gen) {
|
|||
void CObjectModel::begin(code_generation *gen) {
|
||||
CObjectModel::initialise_data(gen);
|
||||
@<Begin the initialiser function@>;
|
||||
CObjectModel::property_by_name(gen, I"value_range", TRUE, FALSE);
|
||||
CObjectModel::property_by_name(gen, I"value_range", FALSE);
|
||||
}
|
||||
|
||||
void CObjectModel::end(code_generation *gen) {
|
||||
|
@ -401,16 +401,24 @@ that references to it will not fail to compile.
|
|||
|
||||
=
|
||||
void CObjectModel::declare_property(code_generator *cgt, code_generation *gen,
|
||||
inter_symbol *prop_name, int used) {
|
||||
inter_symbol *prop_name) {
|
||||
int attr = FALSE;
|
||||
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT)) {
|
||||
int translated = FALSE;
|
||||
if (Inter::Symbols::read_annotation(prop_name, EXPLICIT_ATTRIBUTE_IANN) >= 0) translated = TRUE;
|
||||
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) translated = TRUE;
|
||||
if ((Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) ||
|
||||
(translated == FALSE)) attr = TRUE;
|
||||
}
|
||||
text_stream *name = Inter::Symbols::name(prop_name);
|
||||
C_property *cp = CObjectModel::property_by_name(gen, name, used, FALSE);
|
||||
C_property *cp = CObjectModel::property_by_name(gen, name, attr);
|
||||
text_stream *pname = Metadata::read_optional_textual(Inter::Packages::container(prop_name->definition), I"^name");
|
||||
if (pname)
|
||||
CObjectModel::define_header_constant_for_property(gen, pname, cp->id);
|
||||
}
|
||||
void CObjectModel::declare_attribute(code_generator *cgt, code_generation *gen,
|
||||
text_stream *prop_name) {
|
||||
CObjectModel::property_by_name(gen, prop_name, TRUE, TRUE);
|
||||
CObjectModel::property_by_name(gen, prop_name, TRUE);
|
||||
}
|
||||
|
||||
@ Property IDs count upwards from 0 in declaration order, though they really
|
||||
|
@ -424,7 +432,7 @@ typedef struct C_property {
|
|||
CLASS_DEFINITION
|
||||
} C_property;
|
||||
|
||||
C_property *CObjectModel::property_by_name(code_generation *gen, text_stream *name, int used, int attr) {
|
||||
C_property *CObjectModel::property_by_name(code_generation *gen, text_stream *name, int attr) {
|
||||
dictionary *D = C_GEN_DATA(objdata.declared_properties);
|
||||
C_property *cp;
|
||||
if (Dictionaries::find(D, name) == NULL) {
|
||||
|
@ -558,7 +566,7 @@ typedef struct C_pv_pair {
|
|||
void CObjectModel::assign_property(code_generator *cgt, code_generation *gen,
|
||||
text_stream *property_name, text_stream *val, int as_att) {
|
||||
C_property_owner *owner = C_GEN_DATA(objdata.current_owner);
|
||||
C_property *prop = CObjectModel::property_by_name(gen, property_name, FALSE, FALSE);
|
||||
C_property *prop = CObjectModel::property_by_name(gen, property_name, FALSE);
|
||||
C_pv_pair *pair = CREATE(C_pv_pair);
|
||||
pair->prop = prop;
|
||||
pair->val = Str::duplicate(val);
|
||||
|
|
Loading…
Reference in a new issue