1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/building-module/1-bs.html
2019-09-22 16:43:06 +01:00

332 lines
54 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>1/bm</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 '1/bs' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">building</a></li><li><a href="index.html#1">Chapter 1: Architecture</a></li><li><b>Building Site</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>The maximum here is beyond plenty: it's not the maximum hierarchical depth
of the Inter output, it's the maximum number of times that Inform interrupts
itself during compilation.
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">MAX_PACKAGING_ENTRY_DEPTH</span><span class="plain"> 128</span>
<span class="definitionkeyword">define</span> <span class="constant">MAX_CIP_STACK_SIZE</span><span class="plain"> 2</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">building_site</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">connectors_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">assimilation_package</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">opcodes_set</span><span class="plain">[</span><span class="constant">MAX_BIPS</span><span class="plain">];</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">pragmas_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">package_types_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">holdings_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">veneer_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">begin_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">locals_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">code_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">modules_indexed_by_name</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">main_pr</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">connectors_pr</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">veneer_pr</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">current_inter_routine</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">current_state</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">code_insertion_point</span><span class="plain"> </span><span class="identifier">cip_stack</span><span class="plain">[</span><span class="constant">MAX_CIP_STACK_SIZE</span><span class="plain">];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cip_sp</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">packaging_entry_stack</span><span class="plain">[</span><span class="constant">MAX_PACKAGING_ENTRY_DEPTH</span><span class="plain">];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">packaging_entry_sp</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">hls_indexed_by_name</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HL_VALUES</span>
<span class="plain">#</span><span class="identifier">define</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HL_VALUES</span><span class="plain"> 1</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">hierarchy_location</span><span class="plain"> *</span><span class="identifier">hls_indexed_by_id</span><span class="plain">[</span><span class="identifier">NO_DEFINED_HL_VALUES</span><span class="plain">];</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HAP_VALUES</span>
<span class="plain">#</span><span class="identifier">define</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HAP_VALUES</span><span class="plain"> 1</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">hierarchy_attachment_point</span><span class="plain"> *</span><span class="identifier">haps_indexed_by_id</span><span class="plain">[</span><span class="identifier">NO_DEFINED_HAP_VALUES</span><span class="plain">];</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HMD_VALUES</span>
<span class="plain">#</span><span class="identifier">define</span><span class="plain"> </span><span class="identifier">NO_DEFINED_HMD_VALUES</span><span class="plain"> 1</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">hierarchy_metadatum</span><span class="plain"> *</span><span class="identifier">hmds_indexed_by_id</span><span class="plain">[</span><span class="identifier">NO_DEFINED_HMD_VALUES</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">veneer_symbols</span><span class="plain">[</span><span class="constant">MAX_VSYMBS</span><span class="plain">];</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">veneer_symbol_names</span><span class="plain">[</span><span class="constant">MAX_VSYMBS</span><span class="plain">];</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">veneer_symbol_translations</span><span class="plain">[</span><span class="constant">MAX_VSYMBS</span><span class="plain">];</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">veneer_symbols_indexed_by_name</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">building_site</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure building_site is accessed in 1/tv, 1/hl, 1/pck, 3/pi and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::clear</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="reserved">building_site</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;main_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;connectors_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;assimilation_package</span><span class="plain"> = </span><span class="identifier">NULL</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">&lt;</span><span class="constant">MAX_BIPS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;opcodes_set</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">B</span><span class="plain">-</span><span class="element">&gt;pragmas_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;package_types_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;holdings_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;veneer_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;begin_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;locals_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;code_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;modules_indexed_by_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;main_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;connectors_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;veneer_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;current_inter_routine</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;current_state</span><span class="plain"> = </span><span class="functiontext">Packaging::stateless</span><span class="plain">();</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;cip_sp</span><span class="plain"> = 0;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;packaging_entry_sp</span><span class="plain"> = 0;</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">&lt;</span><span class="identifier">NO_DEFINED_HL_VALUES</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;hls_indexed_by_id</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">B</span><span class="plain">-</span><span class="element">&gt;hls_indexed_by_name</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</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">&lt;</span><span class="identifier">NO_DEFINED_HAP_VALUES</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;haps_indexed_by_id</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="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">&lt;</span><span class="identifier">NO_DEFINED_HMD_VALUES</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;hmds_indexed_by_id</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">B</span><span class="plain">-</span><span class="element">&gt;veneer_symbols_indexed_by_name</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</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">&lt;</span><span class="constant">MAX_VSYMBS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;veneer_symbols</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="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">&lt;</span><span class="constant">MAX_VSYMBS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;veneer_symbol_names</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="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">&lt;</span><span class="constant">MAX_VSYMBS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;veneer_symbol_translations</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="functiontext">Veneer::create_indexes</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">Packaging::initialise_state</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::pragmas</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.pragmas_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_pragmas</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.pragmas_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::package_types</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.package_types_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_package_types</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.package_types_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::holdings</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.holdings_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_holdings</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.holdings_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::begin</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.begin_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_begin</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.begin_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::locals</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.locals_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_locals</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.locals_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::code</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="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.code_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_code</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_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.code_bookmark</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Site::get_opcode</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_t</span><span class="plain"> </span><span class="identifier">bip</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.opcodes_set</span><span class="plain">[</span><span class="identifier">bip</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_opcode</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_t</span><span class="plain"> </span><span class="identifier">bip</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">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.opcodes_set</span><span class="plain">[</span><span class="identifier">bip</span><span class="plain">] = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::main_package</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="reserved">if</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">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="functiontext">Site::main_request</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_package</span><span class="plain">;</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="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::main_package_if_it_exists</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_package</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="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::connectors_package</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_package</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_url</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/main/connectors"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_package</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</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="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_main_package</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_package</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no tree"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_package</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_connectors_package</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_package</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no tree"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_package</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::assimilation_package</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="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no tree"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::ensure_assimilation_package</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_symbol</span><span class="plain"> *</span><span class="identifier">plain_ptype_symbol</span><span class="plain">) {</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no tree"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain"> = </span><span class="functiontext">Site::main_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">in_main</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">);</span>
<span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">CodeGen::Assimilate::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">in_main</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> = </span><span class="identifier">t_p</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_assimilation_package</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_package</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">) {</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no tree"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="functiontext">Site::modules_dictionary</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.modules_indexed_by_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.modules_indexed_by_name</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.modules_indexed_by_name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Site::main_request</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"main"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
<span class="functiontext">PackageTypes::get</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_plain"</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.main_pr</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Site::connectors_request</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">module_package</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">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">"connectors"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_pr</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;the_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_pr</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Site::veneer_request</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="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">module_package</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">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">"veneer"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_pr</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;the_package</span><span class="plain">;</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_pr</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_bookmark</span><span class="plain"> = </span><span class="functiontext">Packaging::bubble</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_pr</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="functiontext">Site::veneer_booknark</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">Site::veneer_request</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.veneer_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Site::veneer_symbol</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="reserved">int</span><span class="plain"> </span><span class="identifier">ix</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="functiontext">Veneer::find_by_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">ix</span><span class="plain">, </span><span class="functiontext">Produce::kind_to_symbol</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">symb</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::get_cir</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="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.current_inter_routine</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_cir</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_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.current_inter_routine</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Site::clear appears nowhere else.</p>
<p class="endnote">The function Site::pragmas appears nowhere else.</p>
<p class="endnote">The function Site::set_pragmas is used in 1/pck (<a href="1-pck.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function Site::package_types is used in 1/pt (<a href="1-pt.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Site::set_package_types is used in 1/pck (<a href="1-pck.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function Site::holdings appears nowhere else.</p>
<p class="endnote">The function Site::set_holdings is used in 1/pck (<a href="1-pck.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function Site::begin is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::set_begin is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::locals is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::set_locals is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::code is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::set_code is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::get_opcode is used in 1/ip (<a href="1-ip.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Site::set_opcode is used in 1/ip (<a href="1-ip.html#SP1">&#167;1</a>, <a href="1-ip.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Site::main_package appears nowhere else.</p>
<p class="endnote">The function Site::main_package_if_it_exists is used in 3/pi (<a href="3-pi.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Site::connectors_package is used in 3/pi (<a href="3-pi.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Site::set_main_package appears nowhere else.</p>
<p class="endnote">The function Site::set_connectors_package appears nowhere else.</p>
<p class="endnote">The function Site::assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::ensure_assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::set_assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::modules_dictionary is used in 1/pck (<a href="1-pck.html#SP15">&#167;15</a>).</p>
<p class="endnote">The function Site::main_request is used in 1/pck (<a href="1-pck.html#SP11">&#167;11</a>, <a href="1-pck.html#SP15">&#167;15</a>), 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::connectors_request is used in 1/in (<a href="1-in.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Site::veneer_request is used in 1/tv (<a href="1-tv.html#SP1">&#167;1</a>), 2/eis (<a href="2-eis.html#SP2_1">&#167;2.1</a>).</p>
<p class="endnote">The function Site::veneer_booknark is used in 1/tv (<a href="1-tv.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Site::veneer_symbol is used in 2/eis (<a href="2-eis.html#SP3_10_1">&#167;3.10.1</a>, <a href="2-eis.html#SP3_11">&#167;3.11</a>).</p>
<p class="endnote">The function Site::get_cir is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Site::set_cir is used in 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="1-bm.html">Back to 'Building Module'</a></li><li><a href="1-ip.html">Continue with 'Inter Primitives'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>