mirror of
https://github.com/ganelson/inform.git
synced 2024-06-02 16:38:08 +03:00
912 lines
218 KiB
HTML
912 lines
218 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>27/cm</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '27/ei' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#27">Chapter 27: Bridge to Inter Module</a></li><li><b>Emitting Inter</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">unchecked_interk</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">unchecked_function_interk</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">int_interk</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">string_interk</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I7_generation_tree</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="functiontext">Emit::tree</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I7_generation_tree</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::begin</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">Inter::Tree::new</span><span class="plain">();</span>
|
|
<span class="identifier">Packaging::initialise_state</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::outside_all_packages</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
|
<span class="identifier">I7_generation_tree</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Site::veneer_request</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"generic"</span><span class="plain">)-></span><span class="identifier">the_package</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"synoptic"</span><span class="plain">)-></span><span class="identifier">the_package</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"standard_rules"</span><span class="plain">)-></span><span class="identifier">the_package</span><span class="plain">);</span>
|
|
|
|
<span class="functiontext">Hierarchy::establish</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">KU</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">K_UNCHECKED_HL</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">KU</span><span class="plain">);</span>
|
|
<span class="identifier">unchecked_interk</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">KU</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_interk</span><span class="plain">), </span><span class="identifier">UNCHECKED_IDT</span><span class="plain">, 0, </span><span class="identifier">BASE_ICON</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">KUF</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">K_UNCHECKED_FUNCTION_HL</span><span class="plain">);</span>
|
|
<span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">KUF</span><span class="plain">);</span>
|
|
<span class="identifier">unchecked_function_interk</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">KUF</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">operands</span><span class="plain">[2];</span>
|
|
<span class="identifier">operands</span><span class="plain">[0] = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_interk</span><span class="plain">);</span>
|
|
<span class="identifier">operands</span><span class="plain">[1] = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_interk</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_function_interk</span><span class="plain">), </span><span class="identifier">ROUTINE_IDT</span><span class="plain">, 0, </span><span class="identifier">FUNCTION_ICON</span><span class="plain">, 2, </span><span class="identifier">operands</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">KTI</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">K_TYPELESS_INT_HL</span><span class="plain">);</span>
|
|
<span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">KTI</span><span class="plain">);</span>
|
|
<span class="identifier">int_interk</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">KTI</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">INT32_IDT</span><span class="plain">, 0, </span><span class="identifier">BASE_ICON</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">KTS</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">K_TYPELESS_STRING_HL</span><span class="plain">);</span>
|
|
<span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">KTS</span><span class="plain">);</span>
|
|
<span class="identifier">string_interk</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">KTS</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">string_interk</span><span class="plain">), </span><span class="identifier">TEXT_IDT</span><span class="plain">, 0, </span><span class="identifier">BASE_ICON</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
|
|
<span class="functiontext">FundamentalConstants::emit</span><span class="plain">(</span><span class="functiontext">Task::vm</span><span class="plain">());</span>
|
|
<span class="functiontext">NewVerbs::ConjugateVerbDefinitions</span><span class="plain">();</span>
|
|
|
|
<span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">INFORMLIBRARY_HL</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::response</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">marker</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">val_iname</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Rules::iname</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">));</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">vsymb</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">val_iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = 0, </span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">vsymb</span><span class="plain">, &</span><span class="identifier">val1</span><span class="plain">, &</span><span class="identifier">val2</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Response::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">symb</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">rsymb</span><span class="plain">), (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">marker</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Emit::tree is used in <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, 4/am (<a href="4-am.html#SP30">§30</a>, <a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP35">§35</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP19">§19</a>, <a href="5-lp.html#SP19_1">§19.1</a>, <a href="5-lp.html#SP19_2">§19.2</a>, <a href="5-lp.html#SP19_3">§19.3</a>, <a href="5-lp.html#SP19_3_1">§19.3.1</a>, <a href="5-lp.html#SP19_3_1_1">§19.3.1.1</a>, <a href="5-lp.html#SP19_3_2">§19.3.2</a>, <a href="5-lp.html#SP19_2_1">§19.2.1</a>, <a href="5-lp.html#SP19_2_2">§19.2.2</a>, <a href="5-lp.html#SP27">§27</a>, <a href="5-lp.html#SP27_2">§27.2</a>, <a href="5-lp.html#SP27_3">§27.3</a>, <a href="5-lp.html#SP27_3_1">§27.3.1</a>, <a href="5-lp.html#SP27_3_2">§27.3.2</a>, <a href="5-lp.html#SP27_3_3">§27.3.3</a>, <a href="5-lp.html#SP27_3_4">§27.3.4</a>, <a href="5-lp.html#SP28">§28</a>), 5/un (<a href="5-un.html#SP1">§1</a>), 5/ins (<a href="5-ins.html#SP29">§29</a>), 5/nv (<a href="5-nv.html#SP10">§10</a>, <a href="5-nv.html#SP12">§12</a>, <a href="5-nv.html#SP16">§16</a>, <a href="5-nv.html#SP25">§25</a>), 6/bp (<a href="6-bp.html#SP25">§25</a>, <a href="6-bp.html#SP33">§33</a>, <a href="6-bp.html#SP42">§42</a>), 6/rlt (<a href="6-rlt.html#SP14">§14</a>, <a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP15_2_1">§15.2.1</a>, <a href="6-rlt.html#SP15_2_2">§15.2.2</a>, <a href="6-rlt.html#SP15_2_3">§15.2.3</a>, <a href="6-rlt.html#SP15_2_4">§15.2.4</a>, <a href="6-rlt.html#SP15_2_5">§15.2.5</a>, <a href="6-rlt.html#SP15_2_5_1">§15.2.5.1</a>, <a href="6-rlt.html#SP15_2_6">§15.2.6</a>, <a href="6-rlt.html#SP15_2_7">§15.2.7</a>, <a href="6-rlt.html#SP15_2_8">§15.2.8</a>, <a href="6-rlt.html#SP15_2_9">§15.2.9</a>, <a href="6-rlt.html#SP15_2_10">§15.2.10</a>, <a href="6-rlt.html#SP15_2_11">§15.2.11</a>, <a href="6-rlt.html#SP15_2_12">§15.2.12</a>, <a href="6-rlt.html#SP15_2_9_1">§15.2.9.1</a>, <a href="6-rlt.html#SP15_2_10_1">§15.2.10.1</a>, <a href="6-rlt.html#SP15_2_12_1">§15.2.12.1</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29">§29</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP17">§17</a>, <a href="6-nv.html#SP18">§18</a>, <a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>, <a href="6-nv.html#SP18_1_2">§18.1.2</a>, <a href="6-nv.html#SP18_1_2_1">§18.1.2.1</a>, <a href="6-nv.html#SP18_1_2_2">§18.1.2.2</a>, <a href="6-nv.html#SP19">§19</a>), 8/ef (<a href="8-ef.html#SP9">§9</a>), 11/tr (<a href="11-tr.html#SP10">§10</a>), 12/is (<a href="12-is.html#SP7">§7</a>, <a href="12-is.html#SP7_3">§7.3</a>, <a href="12-is.html#SP8">§8</a>), 12/ca (<a href="12-ca.html#SP5_2">§5.2</a>), 12/dtd (<a href="12-dtd.html#SP7">§7</a>, <a href="12-dtd.html#SP7_1">§7.1</a>, <a href="12-dtd.html#SP7_1_1">§7.1.1</a>, <a href="12-dtd.html#SP7_1_2">§7.1.2</a>, <a href="12-dtd.html#SP8">§8</a>, <a href="12-dtd.html#SP9">§9</a>, <a href="12-dtd.html#SP9_1">§9.1</a>, <a href="12-dtd.html#SP10">§10</a>, <a href="12-dtd.html#SP11">§11</a>, <a href="12-dtd.html#SP13">§13</a>, <a href="12-dtd.html#SP15">§15</a>, <a href="12-dtd.html#SP16">§16</a>, <a href="12-dtd.html#SP17">§17</a>, <a href="12-dtd.html#SP18">§18</a>, <a href="12-dtd.html#SP19">§19</a>, <a href="12-dtd.html#SP20">§20</a>, <a href="12-dtd.html#SP22">§22</a>, <a href="12-dtd.html#SP23">§23</a>, <a href="12-dtd.html#SP25">§25</a>, <a href="12-dtd.html#SP26">§26</a>, <a href="12-dtd.html#SP27">§27</a>), 12/cad (<a href="12-cad.html#SP7">§7</a>), 12/cdp (<a href="12-cdp.html#SP2_1_6">§2.1.6</a>, <a href="12-cdp.html#SP2_1_6_1">§2.1.6.1</a>, <a href="12-cdp.html#SP2_1_6_1_2_2">§2.1.6.1.2.2</a>, <a href="12-cdp.html#SP2_1_6_1_2_3_2">§2.1.6.1.2.3.2</a>, <a href="12-cdp.html#SP2_1_6_1_2_3_3">§2.1.6.1.2.3.3</a>, <a href="12-cdp.html#SP2_1_6_1_2_3_5">§2.1.6.1.2.3.5</a>, <a href="12-cdp.html#SP2_1_6_1_2_3_7">§2.1.6.1.2.3.7</a>, <a href="12-cdp.html#SP2_1_6_1_2_4">§2.1.6.1.2.4</a>, <a href="12-cdp.html#SP2_1_6_1_2_5">§2.1.6.1.2.5</a>, <a href="12-cdp.html#SP2_1_6_1_2_3_3_1">§2.1.6.1.2.3.3.1</a>, <a href="12-cdp.html#SP2_1_6_1_2_6">§2.1.6.1.2.6</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_1">§2.1.6.1.2.2.1</a>, <a href="12-cdp.html#SP2_1_6_1_4">§2.1.6.1.4</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_2">§2.1.6.1.2.2.2</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_2_1">§2.1.6.1.2.2.2.1</a>, <a href="12-cdp.html#SP2_1_6_1_6">§2.1.6.1.6</a>, <a href="12-cdp.html#SP2_1_6_1_7">§2.1.6.1.7</a>, <a href="12-cdp.html#SP2_1_6_1_8">§2.1.6.1.8</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_3">§2.1.6.1.2.2.3</a>, <a href="12-cdp.html#SP2_1_6_1_9">§2.1.6.1.9</a>, <a href="12-cdp.html#SP2_1_6_1_10">§2.1.6.1.10</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_4">§2.1.6.1.2.2.4</a>, <a href="12-cdp.html#SP2_1_6_1_11">§2.1.6.1.11</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_5">§2.1.6.1.2.2.5</a>, <a href="12-cdp.html#SP2_1_6_1_13">§2.1.6.1.13</a>, <a href="12-cdp.html#SP2_1_6_1_14">§2.1.6.1.14</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_6">§2.1.6.1.2.2.6</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_6_1">§2.1.6.1.2.2.6.1</a>, <a href="12-cdp.html#SP2_1_6_1_15">§2.1.6.1.15</a>, <a href="12-cdp.html#SP2_1_6_1_17">§2.1.6.1.17</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_7">§2.1.6.1.2.2.7</a>, <a href="12-cdp.html#SP2_1_6_1_18">§2.1.6.1.18</a>), 13/kak (<a href="13-kak.html#SP2">§2</a>), 13/ca (<a href="13-ca.html#SP1">§1</a>, <a href="13-ca.html#SP1_2">§1.2</a>, <a href="13-ca.html#SP1_3">§1.3</a>, <a href="13-ca.html#SP1_4">§1.4</a>, <a href="13-ca.html#SP1_5">§1.5</a>, <a href="13-ca.html#SP1_6">§1.6</a>, <a href="13-ca.html#SP1_7">§1.7</a>, <a href="13-ca.html#SP1_8">§1.8</a>, <a href="13-ca.html#SP1_9">§1.9</a>, <a href="13-ca.html#SP1_10">§1.10</a>, <a href="13-ca.html#SP1_11">§1.11</a>, <a href="13-ca.html#SP1_12">§1.12</a>, <a href="13-ca.html#SP1_13">§1.13</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP5">§5</a>, <a href="13-rsfk.html#SP7">§7</a>, <a href="13-rsfk.html#SP9">§9</a>, <a href="13-rsfk.html#SP12">§12</a>, <a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP19">§19</a>, <a href="13-rsfk.html#SP24">§24</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4_1">§24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">§24.4.2</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_5_1">§24.5.1</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 14/rv (<a href="14-rv.html#SP24_3">§24.3</a>), 14/lv (<a href="14-lv.html#SP14_1">§14.1</a>, <a href="14-lv.html#SP14_3">§14.3</a>, <a href="14-lv.html#SP14_3_2">§14.3.2</a>, <a href="14-lv.html#SP14_4">§14.4</a>, <a href="14-lv.html#SP14_5">§14.5</a>), 14/cn (<a href="14-cn.html#SP16">§16</a>, <a href="14-cn.html#SP16_1">§16.1</a>, <a href="14-cn.html#SP16_2">§16.2</a>, <a href="14-cn.html#SP16_3">§16.3</a>), 14/cfs (<a href="14-cfs.html#SP7">§7</a>, <a href="14-cfs.html#SP8">§8</a>), 15/pr (<a href="15-pr.html#SP21">§21</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 15/epv (<a href="15-epv.html#SP4">§4</a>), 16/is (<a href="16-is.html#SP29">§29</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP8">§8</a>, <a href="17-ts.html#SP11">§11</a>, <a href="17-ts.html#SP11_1">§11.1</a>), 17/rs (<a href="17-rs.html#SP5">§5</a>, <a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>, <a href="17-rs.html#SP7_3">§7.3</a>, <a href="17-rs.html#SP12_1_1">§12.1.1</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP1_2">§1.2</a>, <a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>, <a href="20-eq.html#SP48">§48</a>), 21/rl (<a href="21-rl.html#SP9">§9</a>, <a href="21-rl.html#SP11">§11</a>, <a href="21-rl.html#SP11_1">§11.1</a>, <a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP20_1">§20.1</a>, <a href="21-rl.html#SP20_2">§20.2</a>, <a href="21-rl.html#SP21">§21</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP22">§22</a>, <a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_1">§24.1.1</a>, <a href="21-rb.html#SP24_1_2">§24.1.2</a>, <a href="21-rb.html#SP24_1_3">§24.1.3</a>, <a href="21-rb.html#SP24_1_4">§24.1.4</a>, <a href="21-rb.html#SP24_1_5">§24.1.5</a>, <a href="21-rb.html#SP24_1_3_1">§24.1.3.1</a>), 21/rl2 (<a href="21-rl2.html#SP14">§14</a>, <a href="21-rl2.html#SP14_1">§14.1</a>, <a href="21-rl2.html#SP20">§20</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>, <a href="21-sv.html#SP3_1">§3.1</a>, <a href="21-sv.html#SP3_2">§3.2</a>), 21/ac (<a href="21-ac.html#SP8">§8</a>, <a href="21-ac.html#SP14">§14</a>), 22/cs (<a href="22-cs.html#SP8">§8</a>), 22/ph (<a href="22-ph.html#SP13">§13</a>), 22/pu (<a href="22-pu.html#SP18">§18</a>), 22/prcd (<a href="22-prcd.html#SP10">§10</a>, <a href="22-prcd.html#SP10_2">§10.2</a>, <a href="22-prcd.html#SP10_3">§10.3</a>, <a href="22-prcd.html#SP10_4">§10.4</a>, <a href="22-prcd.html#SP10_5">§10.5</a>, <a href="22-prcd.html#SP10_1_1_1">§10.1.1.1</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 22/tp (<a href="22-tp.html#SP8">§8</a>, <a href="22-tp.html#SP10">§10</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 23/abc (<a href="23-abc.html#SP1">§1</a>), 24/lv (<a href="24-lv.html#SP10">§10</a>, <a href="24-lv.html#SP28">§28</a>, <a href="24-lv.html#SP29">§29</a>, <a href="24-lv.html#SP41">§41</a>, <a href="24-lv.html#SP43">§43</a>, <a href="24-lv.html#SP45">§45</a>, <a href="24-lv.html#SP47">§47</a>), 24/pb (<a href="24-pb.html#SP14">§14</a>, <a href="24-pb.html#SP17">§17</a>), 24/ch (<a href="24-ch.html#SP3">§3</a>, <a href="24-ch.html#SP3_1">§3.1</a>, <a href="24-ch.html#SP4">§4</a>, <a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>, <a href="24-ch.html#SP7_1">§7.1</a>, <a href="24-ch.html#SP7_2">§7.2</a>, <a href="24-ch.html#SP7_3">§7.3</a>, <a href="24-ch.html#SP7_4">§7.4</a>, <a href="24-ch.html#SP7_4_1">§7.4.1</a>, <a href="24-ch.html#SP7_5">§7.5</a>, <a href="24-ch.html#SP8">§8</a>), 25/ci (<a href="25-ci.html#SP3">§3</a>, <a href="25-ci.html#SP3_2_3">§3.2.3</a>, <a href="25-ci.html#SP3_2_3_2">§3.2.3.2</a>, <a href="25-ci.html#SP3_2_3_1_1">§3.2.3.1.1</a>, <a href="25-ci.html#SP3_2_3_3">§3.2.3.3</a>, <a href="25-ci.html#SP3_2_3_6">§3.2.3.6</a>, <a href="25-ci.html#SP3_2_3_4_1">§3.2.3.4.1</a>, <a href="25-ci.html#SP3_2_3_3_1_2">§3.2.3.3.1.2</a>, <a href="25-ci.html#SP3_2_3_4_1_1">§3.2.3.4.1.1</a>, <a href="25-ci.html#SP3_2_3_3_1_2_1">§3.2.3.3.1.2.1</a>, <a href="25-ci.html#SP3_2_3_3_1_3">§3.2.3.3.1.3</a>, <a href="25-ci.html#SP4_2">§4.2</a>), 25/ciac (<a href="25-ciac.html#SP2">§2</a>, <a href="25-ciac.html#SP2_1">§2.1</a>), 25/cii (<a href="25-cii.html#SP1_2_1">§1.2.1</a>, <a href="25-cii.html#SP2">§2</a>, <a href="25-cii.html#SP3_1">§3.1</a>, <a href="25-cii.html#SP3_2_3">§3.2.3</a>, <a href="25-cii.html#SP3_2_4">§3.2.4</a>, <a href="25-cii.html#SP3_2_5">§3.2.5</a>, <a href="25-cii.html#SP3_2_6">§3.2.6</a>, <a href="25-cii.html#SP3_4_1">§3.4.1</a>, <a href="25-cii.html#SP3_4_2">§3.4.2</a>, <a href="25-cii.html#SP3_4_3">§3.4.3</a>, <a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="25-cii.html#SP3_1_1_4_9">§3.1.1.4.9</a>, <a href="25-cii.html#SP3_1_1_4_10">§3.1.1.4.10</a>, <a href="25-cii.html#SP3_1_1_4_11">§3.1.1.4.11</a>, <a href="25-cii.html#SP3_5_1">§3.5.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>, <a href="25-cii.html#SP3_5_8">§3.5.8</a>, <a href="25-cii.html#SP3_5_8_1">§3.5.8.1</a>, <a href="25-cii.html#SP3_5_8_2">§3.5.8.2</a>, <a href="25-cii.html#SP3_5_8_3">§3.5.8.3</a>, <a href="25-cii.html#SP3_5_9">§3.5.9</a>, <a href="25-cii.html#SP3_6_1">§3.6.1</a>, <a href="25-cii.html#SP3_6_2">§3.6.2</a>, <a href="25-cii.html#SP3_6_3">§3.6.3</a>, <a href="25-cii.html#SP8">§8</a>), 25/cp (<a href="25-cp.html#SP3_3_1">§3.3.1</a>, <a href="25-cp.html#SP5">§5</a>, <a href="25-cp.html#SP5_2_1">§5.2.1</a>, <a href="25-cp.html#SP5_3_4">§5.3.4</a>, <a href="25-cp.html#SP5_3_5">§5.3.5</a>, <a href="25-cp.html#SP5_3_5_1">§5.3.5.1</a>, <a href="25-cp.html#SP5_3_5_2">§5.3.5.2</a>, <a href="25-cp.html#SP5_3_5_3">§5.3.5.3</a>, <a href="25-cp.html#SP5_4_3">§5.4.3</a>, <a href="25-cp.html#SP5_4_4">§5.4.4</a>, <a href="25-cp.html#SP5_4_5">§5.4.5</a>, <a href="25-cp.html#SP6">§6</a>), 26/fc (<a href="26-fc.html#SP1">§1</a>, <a href="26-fc.html#SP2">§2</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>, <a href="26-uo.html#SP23">§23</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ct (<a href="26-ct.html#SP7">§7</a>), 26/rt (<a href="26-rt.html#SP3">§3</a>, <a href="26-rt.html#SP4">§4</a>, <a href="26-rt.html#SP4_1">§4.1</a>, <a href="26-rt.html#SP4_1_2">§4.1.2</a>, <a href="26-rt.html#SP4_1_3">§4.1.3</a>, <a href="26-rt.html#SP4_1_4">§4.1.4</a>, <a href="26-rt.html#SP4_1_5">§4.1.5</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>, <a href="26-ts.html#SP12">§12</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>), 27/cm (<a href="27-cm.html#SP2">§2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::begin is used in 1/htc (<a href="1-htc.html#SP2_2">§2.2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::response is used in 17/rs (<a href="17-rs.html#SP7_1">§7.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The Inter language allows pragmas, or code-generation hints, to be passed
|
|
through. These are specific to the target of compilation. Here we generate
|
|
only I6-target pragmas, which are commands in Inform Control Language.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">This is a mini-language for controlling the I6 compiler, able to set
|
|
command-line switches, memory settings and so on. I6 ordinarily discards lines
|
|
beginning with exclamation marks as comments, but at the very top of the file,
|
|
lines beginning <code class="display"><span class="extract">!%</span></code> are read as ICL commands: as soon as any line (including
|
|
a blank line) doesn't have this signature, I6 exits ICL mode. This is why we
|
|
insert them into the Inter stream close to the top.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::pragma</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::tree</span><span class="plain">();</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">Inter::Tree::root_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">target_name</span><span class="plain"> =</span>
|
|
<span class="identifier">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span>
|
|
<span class="identifier">Inter::Tree::global_scope</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"target_I6"</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Pragma::new</span><span class="plain">(</span><span class="identifier">Site::pragmas</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">target_name</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::append</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Append::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">symbol</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Emit::main_render_unique</span><span class="plain">(</span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::SymbolsTables::render_identifier_unique</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::holding_symbol</span><span class="plain">(</span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Holding %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Produce::new_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::tree</span><span class="plain">();</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Site::holdings</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Site::holdings</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">symb</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Site::holdings</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, 0, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Site::holdings</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">, 1);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::kind</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">TID</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">super</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">constructor</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> **</span><span class="identifier">operand_kinds</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">S</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">SS</span><span class="plain"> = (</span><span class="identifier">super</span><span class="plain">)?</span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">super</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SUP</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">SS</span><span class="plain">) </span><span class="identifier">SUP</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">SS</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">operands</span><span class="plain">[</span><span class="constant">MAX_KIND_ARITY</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arity</span><span class="plain"> > </span><span class="constant">MAX_KIND_ARITY</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"kind arity too high"</span><span class="plain">);</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">arity</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand_kinds</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="identifier">K_nil</span><span class="plain">) </span><span class="identifier">operands</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = 0;</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">operand_kinds</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]);</span>
|
|
<span class="identifier">operands</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">S</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">TID</span><span class="plain">, </span><span class="identifier">SUP</span><span class="plain">, </span><span class="identifier">constructor</span><span class="plain">, </span><span class="identifier">arity</span><span class="plain">, </span><span class="identifier">operands</span><span class="plain">);</span>
|
|
<span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::kind_inner</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">TID</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SUP</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">constructor</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">operands</span><span class="plain">) {</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Kind::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">TID</span><span class="plain">, </span><span class="identifier">SUP</span><span class="plain">, </span><span class="identifier">constructor</span><span class="plain">, </span><span class="identifier">arity</span><span class="plain">, </span><span class="identifier">operands</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::variable</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">rvalue</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Variable::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">var_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">var_kind</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rvalue</span><span class="plain">) </span><span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">var_name</span><span class="plain">, </span><span class="identifier">EXPLICIT_VARIABLE_IANN</span><span class="plain">, 1);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">var_name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::property</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_kind</span><span class="plain">), </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::permission</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter</span><span class="plain">(</span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">store</span><span class="plain"> = (</span><span class="identifier">name</span><span class="plain">)?</span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="functiontext">Emit::basic_permission</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_name</span><span class="plain">, </span><span class="identifier">owner_kind</span><span class="plain">, </span><span class="identifier">store</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::instance_permission</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">inst_iname</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">inst_name</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">inst_iname</span><span class="plain">);</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">inst_iname</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::basic_permission</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_name</span><span class="plain">, </span><span class="identifier">inst_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ppi7_counter</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::basic_permission</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_name</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">store</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">ident</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">ident</span><span class="plain">, </span><span class="string">"pp_i7_%d"</span><span class="plain">, </span><span class="identifier">ppi7_counter</span><span class="plain">++);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pp_name</span><span class="plain"> = </span><span class="identifier">Inter::Textual::new_symbol</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">), </span><span class="identifier">ident</span><span class="plain">, &</span><span class="identifier">E</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">ident</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Permission::new</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">prop_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">owner_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">pp_name</span><span class="plain">), (</span><span class="identifier">store</span><span class="plain">)?(</span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">store</span><span class="plain">)):0, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">dval_written</span><span class="plain"> {</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K_written</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">;</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">dval_written</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::ensure_defaultvalue</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">K_value</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="reserved">dval_written</span><span class="plain"> *</span><span class="identifier">dw</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dw</span><span class="plain">, </span><span class="reserved">dval_written</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>K_written</span><span class="plain">))</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">dw</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">dval_written</span><span class="plain">);</span>
|
|
<span class="identifier">dw</span><span class="plain">-</span><span class="element">>K_written</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">; </span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v1</span><span class="plain"> = 0; </span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v2</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">Kinds::RunTime::get_default_value</span><span class="plain">(&(</span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v1</span><span class="plain">), &(</span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v2</span><span class="plain">), </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v1</span><span class="plain"> != 0)</span>
|
|
<span class="functiontext">Emit::defaultvalue</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v1</span><span class="plain">, </span><span class="identifier">dw</span><span class="plain">-</span><span class="element">>v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::defaultvalue</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter</span><span class="plain">(</span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::DefaultValue::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">owner_kind</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::propertyvalue</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">) {</span>
|
|
<span class="functiontext">Properties::emit_single</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::PropertyValue::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">owner_kind</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::instance_propertyvalue</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">) {</span>
|
|
<span class="functiontext">Properties::emit_single</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_kind</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Instances::emitted_iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::PropertyValue::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">prop_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">owner_kind</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_string_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">contents</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">contents</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_textual</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">string_interk</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::instance</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">v</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">inst_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val_kind</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no kind for val"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain"> = (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">v</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">v</span><span class="plain"> == 0) { </span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">UNDEF_IVAL</span><span class="plain">; </span><span class="identifier">v2</span><span class="plain"> = 0; }</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Instance::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">inst_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">val_kind</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_generic_constant_xiname</span><span class="plain">(</span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">PR</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">xiname</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">PR</span><span class="plain">), </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">xiname</span><span class="plain">), &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::named_generic_constant</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_generic_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_interk</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::hold_numeric_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_text_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Produce::text_value</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_pseudo_numeric_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">val_kind</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::ds_named_pseudo_numeric_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">val_kind</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_late_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">LATE_IANN</span><span class="plain">, 1);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_byte_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">BYTEARRAY_IANN</span><span class="plain">, 1);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_table_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">TABLEARRAY_IANN</span><span class="plain">, 1);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_string_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">STRINGARRAY_IANN</span><span class="plain">, 1);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_verb_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">VERBARRAY_IANN</span><span class="plain">, 1);</span>
|
|
<span class="identifier">Produce::annotate_iname_i</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">LATE_IANN</span><span class="plain">, 1);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">nascent_array</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">array_name_symbol</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">entry_kind</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">array_form</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_entries</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">capacity</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">entry_data1</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">entry_data2</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">nascent_array</span><span class="plain"> *</span><span class="identifier">up</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">nascent_array</span><span class="plain"> *</span><span class="identifier">down</span><span class="plain">;</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">nascent_array</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">nascent_array</span><span class="plain"> *</span><span class="identifier">first_A</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">current_A</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::push_array</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">nascent_array</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain">) {</span>
|
|
<span class="identifier">A</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>down</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">A</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">nascent_array</span><span class="plain">);</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>up</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>down</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>down</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">first_A</span><span class="plain">) </span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">first_A</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">A</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">nascent_array</span><span class="plain">);</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>up</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>down</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">first_A</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>no_entries</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>entry_kind</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>array_name_symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">A</span><span class="plain">-</span><span class="element">>array_form</span><span class="plain"> = </span><span class="identifier">CONSTANT_INDIRECT_LIST</span><span class="plain">;</span>
|
|
<span class="identifier">current_A</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::pull_array</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"pull array failed"</span><span class="plain">);</span>
|
|
<span class="identifier">current_A</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>up</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v2</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no nascent array"</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>no_entries</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">+1 > </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">M</span><span class="plain"> = 4*(</span><span class="identifier">N</span><span class="plain">+1);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain"> == 0) </span><span class="identifier">M</span><span class="plain"> = 256;</span>
|
|
|
|
<span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">old_data1</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data1</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">old_data2</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data2</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data1</span><span class="plain"> = </span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">), </span><span class="constant">EMIT_ARRAY_MREASON</span><span class="plain">);</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data2</span><span class="plain"> = </span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">), </span><span class="constant">EMIT_ARRAY_MREASON</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data1</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">old_data1</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data2</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">old_data2</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">old_data1</span><span class="plain">) </span><span class="identifier">Memory::I7_array_free</span><span class="plain">(</span><span class="identifier">old_data1</span><span class="plain">, </span><span class="constant">EMIT_ARRAY_MREASON</span><span class="plain">, </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">old_data2</span><span class="plain">) </span><span class="identifier">Memory::I7_array_free</span><span class="plain">(</span><span class="identifier">old_data2</span><span class="plain">, </span><span class="constant">EMIT_ARRAY_MREASON</span><span class="plain">, </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">));</span>
|
|
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>capacity</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data1</span><span class="plain">[</span><span class="identifier">N</span><span class="plain">] = </span><span class="identifier">v1</span><span class="plain">;</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data2</span><span class="plain">[</span><span class="identifier">N</span><span class="plain">] = </span><span class="identifier">v2</span><span class="plain">;</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>no_entries</span><span class="plain">++;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::sum_constant_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>array_form</span><span class="plain"> = </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::named_array_begin</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::push_array</span><span class="plain">();</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">K_value</span><span class="plain">;</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_kind</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">;</span>
|
|
<span class="identifier">current_A</span><span class="plain">-</span><span class="element">>array_name_symbol</span><span class="plain"> = </span><span class="identifier">symb</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_iname_entry</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">alias</span><span class="plain"> = </span><span class="identifier">Site::veneer_symbol</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">NOTHING_VSYMB</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">alias</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = 0, </span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="functiontext">Emit::array_IRS</span><span class="plain">();</span>
|
|
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">alias</span><span class="plain">, &</span><span class="identifier">val1</span><span class="plain">, &</span><span class="identifier">val2</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_null_entry</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Emit::array_iname_entry</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">NULL_HL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_MPN_entry</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Emit::array_iname_entry</span><span class="plain">(</span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">MAX_POSITIVE_NUMBER_HL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_generic_entry</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_action_entry</span><span class="plain">(</span><span class="identifier">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">PL::Actions::iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">));</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="functiontext">Emit::array_IRS</span><span class="plain">();</span>
|
|
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">symb</span><span class="plain">, &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_text_entry</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Produce::text_value</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_dword_entry</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Produce::dword_value</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_plural_dword_entry</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Produce::plural_dword_value</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), &</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_numeric_entry</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_divider</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_text</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"entry outside of inter array"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">S</span><span class="plain">), </span><span class="identifier">divider_text</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">DIVIDER_IVAL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Emit::array_IRS</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter array not opened"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_end</span><span class="plain">(</span><span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter array not opened"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>array_name_symbol</span><span class="plain">;</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_kind</span><span class="plain">;</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">CID</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_kind</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>array_form</span><span class="plain"> == </span><span class="identifier">CONSTANT_INDIRECT_LIST</span><span class="plain">)</span>
|
|
<span class="identifier">con_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">Kinds::unary_construction</span><span class="plain">(</span><span class="identifier">CON_list_of</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">));</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">con_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">CID</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">con_kind</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">CID</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">unchecked_interk</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">array_in_progress</span><span class="plain"> =</span>
|
|
<span class="identifier">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">CONSTANT_IST</span><span class="plain">, </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">CID</span><span class="plain">, </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>array_form</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">array_in_progress</span><span class="plain">-></span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Node::extend</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, (</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) (2*</span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>no_entries</span><span class="plain">)) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend frame"</span><span class="plain">);</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>no_entries</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
|
<span class="identifier">array_in_progress</span><span class="plain">-></span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data1</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="identifier">array_in_progress</span><span class="plain">-></span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">current_A</span><span class="plain">-</span><span class="element">>entry_data2</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
|
<span class="identifier">Inter::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">array_in_progress</span><span class="plain">);</span>
|
|
<span class="functiontext">Emit::pull_array</span><span class="plain">();</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::named_iname_constant</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain"> = (</span><span class="identifier">iname</span><span class="plain">)?</span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">alias</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::le</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">)) </span><span class="identifier">alias</span><span class="plain"> = </span><span class="identifier">Site::veneer_symbol</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">NOTHING_VSYMB</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't handle a null alias"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = 0, </span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">alias</span><span class="plain">, &</span><span class="identifier">val1</span><span class="plain">, &</span><span class="identifier">val2</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">val_kind</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::named_numeric_constant_hex</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">HEX_IANN</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::named_unchecked_constant_hex</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">HEX_IANN</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">unchecked_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::named_numeric_constant_signed</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">SIGNED_IANN</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">int_interk</span><span class="plain">), </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">val</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">save</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="comment">inter_bookmark current_inter_bookmark;</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::early_comment</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Comment::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())) + 1, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">));</span>
|
|
<span class="plain">*/</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::code_comment</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Comment::new</span><span class="plain">(</span><span class="identifier">Produce::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Produce::level</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">));</span>
|
|
<span class="plain">*/</span>
|
|
<span class="plain">}</span>
|
|
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">rkind</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()) == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no inter repository"</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">AB_symbol</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">rkind</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="identifier">Produce::define_symbol</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">rsymb</span><span class="plain">),</span>
|
|
<span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">AB_symbol</span><span class="plain">),</span>
|
|
<span class="identifier">block</span><span class="plain">,</span>
|
|
<span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::local</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">lname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Site::get_cir</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()) == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not in an inter routine"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">K</span><span class="plain"> = </span><span class="identifier">K_number</span><span class="plain">;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Produce::new_local_symbol</span><span class="plain">(</span><span class="identifier">Site::get_cir</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">lname</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">comm</span><span class="plain">) && (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">comm</span><span class="plain">) > 0)) {</span>
|
|
<span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">comm</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">annot</span><span class="plain">) </span><span class="identifier">Produce::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">, 0);</span>
|
|
<span class="identifier">Inter::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(</span><span class="identifier">Produce::locals_bookmark</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">loc_kind</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Produce::locals_bookmark</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">loc_name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::cast</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">from_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">to_kind</span><span class="plain"> = </span><span class="identifier">Produce::kind_to_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Cast::new</span><span class="plain">(</span><span class="identifier">Produce::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">from_kind</span><span class="plain">, </span><span class="identifier">to_kind</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Produce::level</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::intervention</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">part</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">i6</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">seg</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID1</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID1</span><span class="plain">), </span><span class="identifier">segment</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID2</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID2</span><span class="plain">), </span><span class="identifier">part</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID3</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID3</span><span class="plain">), </span><span class="identifier">i6</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID4</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">ID4</span><span class="plain">), </span><span class="identifier">seg</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_ref</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
|
|
<span class="identifier">Inter::Warehouse::set_ref</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())));</span>
|
|
|
|
<span class="identifier">Produce::guard</span><span class="plain">(</span><span class="identifier">Inter::Link::new</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">ID1</span><span class="plain">, </span><span class="identifier">ID2</span><span class="plain">, </span><span class="identifier">ID3</span><span class="plain">, </span><span class="identifier">ID4</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">, </span><span class="identifier">Produce::baseline</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">())), </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Emit::pragma is used in 26/uo (<a href="26-uo.html#SP18">§18</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::append is used in 15/epv (<a href="15-epv.html#SP1_1_2">§1.1.2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::main_render_unique is used in 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::holding_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::kind is used in 13/rsfk (<a href="13-rsfk.html#SP22">§22</a>, <a href="13-rsfk.html#SP24">§24</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::kind_inner is used in <a href="#SP2">§2</a>.</p>
|
|
|
|
<p class="endnote">The function Emit::variable is used in 5/nv (<a href="5-nv.html#SP16">§16</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::property is used in 15/pr (<a href="15-pr.html#SP27">§27</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::permission is used in 15/pr (<a href="15-pr.html#SP27">§27</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::instance_permission is used in 15/pr (<a href="15-pr.html#SP27">§27</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::basic_permission appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::ensure_defaultvalue is used in 15/pr (<a href="15-pr.html#SP27">§27</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::defaultvalue appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::propertyvalue is used in 15/epv (<a href="15-epv.html#SP2_1">§2.1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::instance_propertyvalue is used in 15/epv (<a href="15-epv.html#SP2_1">§2.1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_string_constant is used in 12/cdp (<a href="12-cdp.html#SP2_1_1">§2.1.1</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 26/fc (<a href="26-fc.html#SP2">§2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::instance is used in 5/ins (<a href="5-ins.html#SP34">§34</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_generic_constant_xiname is used in 21/rl (<a href="21-rl.html#SP9">§9</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_generic_constant appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::named_numeric_constant is used in 6/rlt (<a href="6-rlt.html#SP20_3">§20.3</a>), 13/kak (<a href="13-kak.html#SP5">§5</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>), 21/ac (<a href="21-ac.html#SP6">§6</a>), 22/cs (<a href="22-cs.html#SP8">§8</a>), 24/ch (<a href="24-ch.html#SP8">§8</a>), 26/fc (<a href="26-fc.html#SP1">§1</a>), 26/uo (<a href="26-uo.html#SP21">§21</a>, <a href="26-uo.html#SP23">§23</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::hold_numeric_constant appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::named_text_constant appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::named_pseudo_numeric_constant appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::ds_named_pseudo_numeric_constant appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::named_late_array_begin is used in 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 17/tl (<a href="17-tl.html#SP16">§16</a>), 17/ts (<a href="17-ts.html#SP8_1">§8.1</a>), 18/lc (<a href="18-lc.html#SP11">§11</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_byte_array_begin is used in 6/rlt (<a href="6-rlt.html#SP20_3">§20.3</a>), 19/rsft (<a href="19-rsft.html#SP1_2">§1.2</a>), 21/ac (<a href="21-ac.html#SP14">§14</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_table_array_begin is used in 19/rsft (<a href="19-rsft.html#SP1_1_1_1">§1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1">§1.1.1.1.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_string_array_begin appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::named_verb_array_begin appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::push_array appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::pull_array appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::add_entry appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::sum_constant_begin is used in 6/rlt (<a href="6-rlt.html#SP15_1_2">§15.1.2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_array_begin is used in 6/rlt (<a href="6-rlt.html#SP15_1">§15.1</a>, <a href="6-rlt.html#SP16">§16</a>, <a href="6-rlt.html#SP20">§20</a>, <a href="6-rlt.html#SP20_3">§20.3</a>), 6/nv (<a href="6-nv.html#SP18">§18</a>), 13/rsfk (<a href="13-rsfk.html#SP16_1">§16.1</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP7_3">§7.3</a>), 18/lc (<a href="18-lc.html#SP12_1">§12.1</a>, <a href="18-lc.html#SP13">§13</a>), 19/rsft (<a href="19-rsft.html#SP1_3">§1.3</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14">§14</a>, <a href="21-rl2.html#SP20">§20</a>), 21/ac (<a href="21-ac.html#SP8">§8</a>, <a href="21-ac.html#SP14">§14</a>), 22/pav (<a href="22-pav.html#SP8_1">§8.1</a>, <a href="22-pav.html#SP9_1">§9.1</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/jl (<a href="26-jl.html#SP6">§6</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_iname_entry is used in 6/rlt (<a href="6-rlt.html#SP15_1_2">§15.1.2</a>, <a href="6-rlt.html#SP15_1_2_1">§15.1.2.1</a>, <a href="6-rlt.html#SP15_1_3">§15.1.3</a>, <a href="6-rlt.html#SP15_1_6">§15.1.6</a>, <a href="6-rlt.html#SP16">§16</a>, <a href="6-rlt.html#SP20_2">§20.2</a>), 6/nv (<a href="6-nv.html#SP18">§18</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP9">§9</a>, <a href="13-rsfk.html#SP12">§12</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>, <a href="17-tl.html#SP16">§16</a>), 17/ts (<a href="17-ts.html#SP8_1">§8.1</a>, <a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP7_3_1_1">§7.3.1.1</a>), 18/lc (<a href="18-lc.html#SP11">§11</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1">§1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1_5">§1.1.1.1.1.5</a>, <a href="19-rsft.html#SP1_3">§1.3</a>), 21/rl2 (<a href="21-rl2.html#SP14">§14</a>, <a href="21-rl2.html#SP20">§20</a>), 21/ac (<a href="21-ac.html#SP8">§8</a>), 22/pav (<a href="22-pav.html#SP8_1">§8.1</a>, <a href="22-pav.html#SP9_1">§9.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_null_entry is used in 6/rlt (<a href="6-rlt.html#SP15_1">§15.1</a>, <a href="6-rlt.html#SP16">§16</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1_1_3">§1.1.1.1.1.3</a>, <a href="19-rsft.html#SP1_2">§1.2</a>), 21/rb (<a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/ac (<a href="21-ac.html#SP14">§14</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_MPN_entry is used in 13/rsfk (<a href="13-rsfk.html#SP20">§20</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_generic_entry is used in 5/nv (<a href="5-nv.html#SP25">§25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/cfs (<a href="14-cfs.html#SP9">§9</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1_1_4">§1.1.1.1.1.4</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_action_entry is used in 21/rb (<a href="21-rb.html#SP24_1_2">§24.1.2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_text_entry is used in 6/rlt (<a href="6-rlt.html#SP15_1_1">§15.1.1</a>, <a href="6-rlt.html#SP15_1_5">§15.1.5</a>, <a href="6-rlt.html#SP16">§16</a>), 17/rs (<a href="17-rs.html#SP7_3_1_1">§7.3.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP20">§20</a>), 22/pav (<a href="22-pav.html#SP8_1">§8.1</a>, <a href="22-pav.html#SP9_1">§9.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_dword_entry appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::array_plural_dword_entry appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::array_numeric_entry is used in 6/rlt (<a href="6-rlt.html#SP15_1">§15.1</a>, <a href="6-rlt.html#SP15_1_3">§15.1.3</a>, <a href="6-rlt.html#SP16">§16</a>, <a href="6-rlt.html#SP19">§19</a>, <a href="6-rlt.html#SP20_2">§20.2</a>, <a href="6-rlt.html#SP20_3">§20.3</a>), 6/nv (<a href="6-nv.html#SP18">§18</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP9">§9</a>, <a href="13-rsfk.html#SP16_1_1_1">§16.1.1.1</a>, <a href="13-rsfk.html#SP16_1_1_2">§16.1.1.2</a>, <a href="13-rsfk.html#SP20">§20</a>), 17/rs (<a href="17-rs.html#SP7_3">§7.3</a>, <a href="17-rs.html#SP7_3_1_1">§7.3.1.1</a>, <a href="17-rs.html#SP7_3_1_2">§7.3.1.2</a>), 18/lc (<a href="18-lc.html#SP11">§11</a>, <a href="18-lc.html#SP12_1">§12.1</a>, <a href="18-lc.html#SP13">§13</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1_1_3">§1.1.1.1.1.3</a>, <a href="19-rsft.html#SP1_1_1_1_1_4">§1.1.1.1.1.4</a>, <a href="19-rsft.html#SP1_2_3">§1.2.3</a>, <a href="19-rsft.html#SP1_3">§1.3</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>, <a href="21-rb.html#SP24_1_2">§24.1.2</a>), 21/rl2 (<a href="21-rl2.html#SP14">§14</a>, <a href="21-rl2.html#SP20">§20</a>), 21/ac (<a href="21-ac.html#SP8">§8</a>, <a href="21-ac.html#SP14">§14</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>), 26/jl (<a href="26-jl.html#SP6">§6</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::array_divider appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::array_IRS appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::array_end is used in 6/rlt (<a href="6-rlt.html#SP15_1">§15.1</a>, <a href="6-rlt.html#SP15_1_2">§15.1.2</a>, <a href="6-rlt.html#SP16">§16</a>, <a href="6-rlt.html#SP20">§20</a>, <a href="6-rlt.html#SP20_3">§20.3</a>), 6/nv (<a href="6-nv.html#SP18">§18</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP16_1">§16.1</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>, <a href="17-tl.html#SP16">§16</a>), 17/ts (<a href="17-ts.html#SP8_1">§8.1</a>, <a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP7_3">§7.3</a>), 18/lc (<a href="18-lc.html#SP11">§11</a>, <a href="18-lc.html#SP12_1">§12.1</a>, <a href="18-lc.html#SP13">§13</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1">§1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1">§1.1.1.1.1</a>, <a href="19-rsft.html#SP1_2">§1.2</a>, <a href="19-rsft.html#SP1_3">§1.3</a>), 21/rb (<a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14">§14</a>, <a href="21-rl2.html#SP20">§20</a>), 21/ac (<a href="21-ac.html#SP8">§8</a>, <a href="21-ac.html#SP14">§14</a>), 22/pav (<a href="22-pav.html#SP8_1">§8.1</a>, <a href="22-pav.html#SP9_1">§9.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/jl (<a href="26-jl.html#SP6">§6</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_iname_constant is used in 6/bp (<a href="6-bp.html#SP42">§42</a>), 16/ic (<a href="16-ic.html#SP10">§10</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 21/rb (<a href="21-rb.html#SP24">§24</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_numeric_constant_hex is used in 6/rlt (<a href="6-rlt.html#SP14">§14</a>), 26/fc (<a href="26-fc.html#SP1">§1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_unchecked_constant_hex is used in 26/fc (<a href="26-fc.html#SP1">§1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::named_numeric_constant_signed is used in 6/nv (<a href="6-nv.html#SP18">§18</a>), 26/fc (<a href="26-fc.html#SP1">§1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::early_comment appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function Emit::code_comment is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>, <a href="5-lp.html#SP29">§29</a>, <a href="5-lp.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_2">§18.2</a>), 12/cdp (<a href="12-cdp.html#SP1">§1</a>), 13/rsfk (<a href="13-rsfk.html#SP24_1">§24.1</a>), 20/eq (<a href="20-eq.html#SP47">§47</a>), 25/ci (<a href="25-ci.html#SP3_2_3">§3.2.3</a>), 25/cp (<a href="25-cp.html#SP5_1">§5.1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::routine is used in 26/rt (<a href="26-rt.html#SP4">§4</a>, <a href="26-rt.html#SP4_1">§4.1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::local is used in 24/lv (<a href="24-lv.html#SP47">§47</a>), 26/rt (<a href="26-rt.html#SP4_1_1">§4.1.1</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::cast is used in 13/rsfk (<a href="13-rsfk.html#SP24_4_1">§24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">§24.4.2</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::intervention is used in 26/i6i (<a href="26-i6i.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP17">§17</a>).</p>
|
|
|
|
<p class="endnote">The structure dval_written is private to this section.</p>
|
|
|
|
<p class="endnote">The structure nascent_array is accessed in 5/lp, 5/un, 7/ns, 7/oaf, 7/rs, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/aots, 10/teav, 10/varc, 10/cap, 11/bas, 11/tc, 11/sc, 11/sm, 12/dtd, 14/sp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 17/ts, 18/lc, 19/tb, 19/rsft, 19/tod, 21/rl, 21/rl2, 21/rps, 21/ac, 22/cs, 22/ph, 23/ad, 24/lv, 24/ch, 25/in, 25/pi, 25/cp, 26/uo, 26/tti, 27/cm and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
|
|
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Emit::to_text</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">)-></span><span class="identifier">symbol_name</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::holster</span><span class="plain">(</span><span class="identifier">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Holsters::data_acceptable</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">)) {</span>
|
|
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">Emit::to_ival</span><span class="plain">(&</span><span class="identifier">v1</span><span class="plain">, &</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="identifier">Holsters::holster_pair</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::symbol_to_ival</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) { </span><span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
|
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::to_ival</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) { </span><span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
|
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::to_ival_in_context</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">context</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">PR</span><span class="plain"> = </span><span class="identifier">InterNames::location</span><span class="plain">(</span><span class="identifier">context</span><span class="plain">);</span>
|
|
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">PR</span><span class="plain">);</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) { </span><span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">Inter::Packages::tree</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
|
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = 0;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Emit::defined</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">ival_emission</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">emission_VH</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">saved_PS</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">ival_emission</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">ival_emission</span><span class="plain"> </span><span class="functiontext">Emit::begin_ival_emission</span><span class="plain">(</span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
|
|
<span class="reserved">ival_emission</span><span class="plain"> </span><span class="identifier">IE</span><span class="plain">;</span>
|
|
<span class="identifier">IE</span><span class="element">.emission_VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_DATA_VHMODE</span><span class="plain">);</span>
|
|
<span class="identifier">IE</span><span class="element">.saved_PS</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">value_holster</span><span class="plain"> *</span><span class="functiontext">Emit::ival_holster</span><span class="plain">(</span><span class="reserved">ival_emission</span><span class="plain"> *</span><span class="identifier">IE</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> &(</span><span class="identifier">IE</span><span class="plain">-</span><span class="element">>emission_VH</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::end_ival_emission</span><span class="plain">(</span><span class="reserved">ival_emission</span><span class="plain"> *</span><span class="identifier">IE</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">) {</span>
|
|
<span class="identifier">Holsters::unholster_pair</span><span class="plain">(&(</span><span class="identifier">IE</span><span class="plain">-</span><span class="element">>emission_VH</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
|
|
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">IE</span><span class="plain">-</span><span class="element">>saved_PS</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">package_request</span><span class="plain"> *</span><span class="functiontext">Emit::current_enclosure</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Packaging::enclosure</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="functiontext">Emit::unused_packaging_state</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Packaging::stateless</span><span class="plain">();</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Emit::to_text is used in 15/vp (<a href="15-vp.html#SP3">§3</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::holster is used in 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/rv (<a href="14-rv.html#SP24_2">§24.2</a>, <a href="14-rv.html#SP24_3">§24.3</a>, <a href="14-rv.html#SP24_3_1">§24.3.1</a>), 17/tl (<a href="17-tl.html#SP10">§10</a>, <a href="17-tl.html#SP10_2_1">§10.2.1</a>, <a href="17-tl.html#SP16">§16</a>), 17/ts (<a href="17-ts.html#SP8">§8</a>, <a href="17-ts.html#SP8_1">§8.1</a>), 17/rs (<a href="17-rs.html#SP12">§12</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::symbol_to_ival is used in 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::to_ival is used in 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::to_ival_in_context is used in 17/tl (<a href="17-tl.html#SP13">§13</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::defined is used in 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::begin_ival_emission is used in 5/nv (<a href="5-nv.html#SP25">§25</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::ival_holster is used in 5/nv (<a href="5-nv.html#SP25">§25</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::end_ival_emission is used in 5/nv (<a href="5-nv.html#SP25">§25</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::current_enclosure is used in 17/ts (<a href="17-ts.html#SP8">§8</a>, <a href="17-ts.html#SP8_1">§8.1</a>), 18/lc (<a href="18-lc.html#SP5">§5</a>), 25/cii (<a href="25-cii.html#SP8">§8</a>).</p>
|
|
|
|
<p class="endnote">The function Emit::unused_packaging_state is used in 21/rb (<a href="21-rb.html#SP24_1">§24.1</a>), 26/rt (<a href="26-rt.html#SP3">§3</a>).</p>
|
|
|
|
<p class="endnote">The structure ival_emission is private to this section.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="27-cm.html">Back to 'Compilation Modules'</a></li><li><i>(This section ends Chapter 27: Bridge to Inter Module.)</i></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|