mu/html/035lookup.cc.html
Kartik Agaram 08a0eed699 4891
Couple more tweaks to html rendering:
a) SubX definitions no longer link redundantly to themselves. This long-standing
issue turns out to be tractable to solve for SubX files since the syntax
is so simple.
b) Fix links to SubX definitions in other directories. I forgot that I
have to always generate tags from the directory of the file being linkified.
c) Fix link colors. Before we lost all syntax highlighting for functions
and Globals. Now they maintain their colors, just add an underline.
2018-12-30 00:02:42 -08:00

605 lines
83 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 035lookup.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.traceAbsent { color: #c00000; }
.SalientComment { color: #0000af; }
.cSpecial { color: #008000; }
.LineNr { }
.Constant { color: #008787; }
.muRecipe { color: #ff8700; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.CommentedCode { color: #8a8a8a; }
.traceContains { color: #005f00; }
-->
</style>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
var lineNum;
lineNum = window.location.hash;
lineNum = lineNum.substr(1); /* strip off '#' */
if (lineNum.indexOf('L') == -1) {
lineNum = 'L'+lineNum;
}
lineElem = document.getElementById(lineNum);
/* Always jump to new location even if the line was hidden inside a fold, or
* we corrected the raw number to a line ID.
*/
if (lineElem) {
lineElem.scrollIntoView(true);
}
return true;
}
if ('onhashchange' in window) {
window.onhashchange = JumpToLine;
}
-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/035lookup.cc'>https://github.com/akkartik/mu/blob/master/035lookup.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: Go from an address to the payload it points at using /lookup.</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">//:</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">//: The tests in this layer use unsafe operations so as to stay decoupled from</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">//: 'new'.</span>
<span id="L5" class="LineNr"> 5 </span>
<span id="L6" class="LineNr"> 6 </span><span class="Delimiter">:(scenario copy_indirect)</span>
<span id="L7" class="LineNr"> 7 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L8" class="LineNr"> 8 </span> <span class="Comment"># skip alloc id for 10:&amp;:num</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L10" class="LineNr"> 10 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L11" class="LineNr"> 11 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L12" class="LineNr"> 12 </span> <span class="Comment"># Treat locations 10 and 11 as an address to look up, pointing at the</span>
<span id="L13" class="LineNr"> 13 </span> <span class="Comment"># payload in locations 20 and 21.</span>
<span id="L14" class="LineNr"> 14 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:num/lookup
<span id="L15" class="LineNr"> 15 </span>]
<span id="L16" class="LineNr"> 16 </span><span class="traceContains">+mem: storing 94 in location 30</span>
<span id="L17" class="LineNr"> 17 </span>
<span id="L18" class="LineNr"> 18 </span><span class="Delimiter">:(before &quot;End Preprocess read_memory(x)&quot;)</span>
<span id="L19" class="LineNr"> 19 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L20" class="LineNr"> 20 </span>
<span id="L21" class="LineNr"> 21 </span><span class="Comment">//: similarly, write to addresses pointing at other locations using the</span>
<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: 'lookup' property</span>
<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(scenario store_indirect)</span>
<span id="L24" class="LineNr"> 24 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L25" class="LineNr"> 25 </span> <span class="Comment"># skip alloc id for 10:&amp;:num</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>
<span id="L27" class="LineNr"> 27 </span> <span class="Constant">10</span>:&amp;:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L28" class="LineNr"> 28 </span>]
<span id="L29" class="LineNr"> 29 </span><span class="traceContains">+mem: storing 94 in location 11</span>
<span id="L30" class="LineNr"> 30 </span>
<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(before &quot;End Preprocess write_memory(x, data)&quot;)</span>
<span id="L32" class="LineNr"> 32 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L33" class="LineNr"> 33 </span>
<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: writes to address 0 always loudly fail</span>
<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(scenario store_to_0_fails)</span>
<span id="L36" class="LineNr"> 36 </span><span class="Special">% Hide_errors = true;</span>
<span id="L37" class="LineNr"> 37 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L38" class="LineNr"> 38 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Constant">10</span>:&amp;:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L40" class="LineNr"> 40 </span>]
<span id="L41" class="LineNr"> 41 </span><span class="traceAbsent">-mem: storing 94 in location 0</span>
<span id="L42" class="LineNr"> 42 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to lookup 0 in '10:&amp;:num/lookup &lt;- copy 94'</span>
<span id="L43" class="LineNr"> 43 </span>
<span id="L44" class="LineNr"> 44 </span><span class="Comment">//: attempts to /lookup address 0 always loudly fail</span>
<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(scenario lookup_0_fails)</span>
<span id="L46" class="LineNr"> 46 </span><span class="Special">% Hide_errors = true;</span>
<span id="L47" class="LineNr"> 47 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L48" class="LineNr"> 48 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
<span id="L49" class="LineNr"> 49 </span> <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:num/lookup
<span id="L50" class="LineNr"> 50 </span>]
<span id="L51" class="LineNr"> 51 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to lookup 0 in '20:num &lt;- copy 10:&amp;:num/lookup'</span>
<span id="L52" class="LineNr"> 52 </span>
<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">:(scenario lookup_0_dumps_callstack)</span>
<span id="L54" class="LineNr"> 54 </span><span class="Special">% Hide_errors = true;</span>
<span id="L55" class="LineNr"> 55 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L56" class="LineNr"> 56 </span> foo<span class="Constant"> null</span>
<span id="L57" class="LineNr"> 57 </span>]
<span id="L58" class="LineNr"> 58 </span><span class="muRecipe">def</span> foo [
<span id="L59" class="LineNr"> 59 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>next-input
<span id="L60" class="LineNr"> 60 </span> <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:num/lookup
<span id="L61" class="LineNr"> 61 </span>]
<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+error: foo: tried to lookup 0 in '20:num &lt;- copy 10:&amp;:num/lookup'</span>
<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+error: called from <a href='000organization.cc.html#L113'>main</a>: foo null</span>
<span id="L64" class="LineNr"> 64 </span>
<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(code)</span>
<span id="L66" class="LineNr"> 66 </span><span class="Normal">void</span> <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L67" class="LineNr"> 67 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L68" class="LineNr"> 68 </span> <span class="Comment">// Begin canonize(x) Lookups</span>
<span id="L69" class="LineNr"> 69 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">))</span>
<span id="L70" class="LineNr"> 70 </span> <a href='035lookup.cc.html#L73'>lookup_memory</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">}</span>
<span id="L72" class="LineNr"> 72 </span>
<span id="L73" class="LineNr"> 73 </span><span class="Normal">void</span> <a href='035lookup.cc.html#L73'>lookup_memory</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != <span class="Special">Address_type_ordinal</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L75" class="LineNr"> 75 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to lookup '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' but it isn't an address\n&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L76" class="LineNr"> 76 </span> dump_callstack<span class="Delimiter">();</span>
<span id="L77" class="LineNr"> 77 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L78" class="LineNr"> 78 </span> <span class="Delimiter">}</span>
<span id="L79" class="LineNr"> 79 </span> <span class="Comment">// compute value</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L81" class="LineNr"> 81 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to lookup 0\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L82" class="LineNr"> 82 </span> dump_callstack<span class="Delimiter">();</span>
<span id="L83" class="LineNr"> 83 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L84" class="LineNr"> 84 </span> <span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span> <a href='035lookup.cc.html#L88'>lookup_memory_core</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">check_for_null</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">}</span>
<span id="L87" class="LineNr"> 87 </span>
<span id="L88" class="LineNr"> 88 </span><span class="Normal">void</span> <a href='035lookup.cc.html#L88'>lookup_memory_core</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">bool</span> check_for_null<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> <span class="Normal">double</span> <a href='043space.cc.html#L101'>address</a> = x<span class="Delimiter">.</span>value + <span class="Comment">/*</span><span class="Comment">skip alloc id in <a href='043space.cc.html#L101'>address</a></span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Normal">double</span> new_value = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">);</span>
<span id="L91" class="LineNr"> 91 </span> <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <span class="Constant">&quot; contains &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>new_value<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Comment">// check for null</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>check_for_null &amp;&amp; new_value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Current_routine</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L95" class="LineNr"> 95 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to lookup 0 in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L96" class="LineNr"> 96 </span> dump_callstack<span class="Delimiter">();</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Delimiter">}</span>
<span id="L98" class="LineNr"> 98 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L99" class="LineNr"> 99 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;tried to lookup 0\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L100" class="LineNr">100 </span> <span class="Delimiter">}</span>
<span id="L101" class="LineNr">101 </span> <span class="Delimiter">}</span>
<span id="L102" class="LineNr">102 </span> <span class="Comment">// validate alloc-id</span>
<span id="L103" class="LineNr">103 </span> <span class="Normal">double</span> alloc_id_in_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
<span id="L104" class="LineNr">104 </span> <span class="Normal">double</span> alloc_id_in_payload = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> new_value<span class="Delimiter">);</span>
<span id="L105" class="LineNr">105 </span><span class="CommentedCode">//? cerr &lt;&lt; x.value &lt;&lt; &quot;: &quot; &lt;&lt; alloc_id_in_address &lt;&lt; &quot; vs &quot; &lt;&lt; new_value &lt;&lt; &quot;: &quot; &lt;&lt; alloc_id_in_payload &lt;&lt; '\n';</span>
<span id="L106" class="LineNr">106 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>alloc_id_in_address != alloc_id_in_payload<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L107" class="LineNr">107 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;address is already abandoned in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L108" class="LineNr">108 </span> dump_callstack<span class="Delimiter">();</span>
<span id="L109" class="LineNr">109 </span> <span class="Delimiter">}</span>
<span id="L110" class="LineNr">110 </span> <span class="Comment">// all well; complete the lookup</span>
<span id="L111" class="LineNr">111 </span> x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>new_value+<span class="Comment">/*</span><span class="Comment">skip alloc id in payload</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L112" class="LineNr">112 </span> drop_from_type<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
<span id="L113" class="LineNr">113 </span> drop_one_lookup<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L114" class="LineNr">114 </span><span class="Delimiter">}</span>
<span id="L115" class="LineNr">115 </span>
<span id="L116" class="LineNr">116 </span><span class="Delimiter">:(after &quot;Begin types_coercible(reagent to, reagent from)&quot;)</span>
<span id="L117" class="LineNr">117 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L118" class="LineNr">118 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(after &quot;Begin types_match(reagent to, reagent from)&quot;)</span>
<span id="L120" class="LineNr">120 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L121" class="LineNr">121 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(after &quot;Begin types_strictly_match(reagent to, reagent from)&quot;)</span>
<span id="L123" class="LineNr">123 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L125" class="LineNr">125 </span>
<span id="L126" class="LineNr">126 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_array(reagent r)&quot;)</span>
<span id="L127" class="LineNr">127 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L128" class="LineNr">128 </span>
<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_address(reagent r)&quot;)</span>
<span id="L130" class="LineNr">130 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L131" class="LineNr">131 </span>
<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_number(reagent r)&quot;)</span>
<span id="L133" class="LineNr">133 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_boolean(reagent r)&quot;)</span>
<span id="L135" class="LineNr">135 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_character(reagent r)&quot;)</span>
<span id="L137" class="LineNr">137 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L138" class="LineNr">138 </span>
<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(after &quot;Update product While Type-checking Merge&quot;)</span>
<span id="L140" class="LineNr">140 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
<span id="L141" class="LineNr">141 </span>
<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Compute Call Ingredient&quot;)</span>
<span id="L143" class="LineNr">143 </span>canonize_type<span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(before &quot;End Preprocess NEXT_INGREDIENT product&quot;)</span>
<span id="L145" class="LineNr">145 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
<span id="L146" class="LineNr">146 </span><span class="Delimiter">:(before &quot;End Check RETURN Copy(lhs, rhs)</span>
<span id="L147" class="LineNr">147 </span>canonize_type<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
<span id="L148" class="LineNr">148 </span>canonize_type<span class="Delimiter">(</span>rhs<span class="Delimiter">);</span>
<span id="L149" class="LineNr">149 </span>
<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(code)</span>
<span id="L151" class="LineNr">151 </span><span class="Normal">bool</span> canonize_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> <span class="Normal">while</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L153" class="LineNr">153 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != <span class="Special">Address_type_ordinal</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L154" class="LineNr">154 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;cannot perform lookup on '&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' because it has non-address type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L155" class="LineNr">155 </span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
<span id="L156" class="LineNr">156 </span> <span class="Delimiter">}</span>
<span id="L157" class="LineNr">157 </span> drop_from_type<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
<span id="L158" class="LineNr">158 </span> drop_one_lookup<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
<span id="L159" class="LineNr">159 </span> <span class="Delimiter">}</span>
<span id="L160" class="LineNr">160 </span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
<span id="L161" class="LineNr">161 </span><span class="Delimiter">}</span>
<span id="L162" class="LineNr">162 </span>
<span id="L163" class="LineNr">163 </span><span class="Normal">void</span> drop_one_lookup<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L164" class="LineNr">164 </span> <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt;::iterator p = r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span><a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L165" class="LineNr">165 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first == <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L166" class="LineNr">166 </span> r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>p<span class="Delimiter">);</span>
<span id="L167" class="LineNr">167 </span> <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L168" class="LineNr">168 </span> <span class="Delimiter">}</span>
<span id="L169" class="LineNr">169 </span> <span class="Delimiter">}</span>
<span id="L170" class="LineNr">170 </span> assert<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
<span id="L171" class="LineNr">171 </span><span class="Delimiter">}</span>
<span id="L172" class="LineNr">172 </span>
<span id="L173" class="LineNr">173 </span><span class="Comment">//: Tedious fixup to support addresses in container/array instructions of previous layers.</span>
<span id="L174" class="LineNr">174 </span><span class="Comment">//: Most instructions don't require fixup if they use the 'ingredients' and</span>
<span id="L175" class="LineNr">175 </span><span class="Comment">//: 'products' variables in run_current_routine().</span>
<span id="L176" class="LineNr">176 </span>
<span id="L177" class="LineNr">177 </span><span class="Delimiter">:(scenario get_indirect)</span>
<span id="L178" class="LineNr">178 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L179" class="LineNr">179 </span> <span class="Comment"># skip alloc id for 10:&amp;:point</span>
<span id="L180" class="LineNr">180 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L181" class="LineNr">181 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L182" class="LineNr">182 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L183" class="LineNr">183 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L184" class="LineNr">184 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">10</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
<span id="L185" class="LineNr">185 </span>]
<span id="L186" class="LineNr">186 </span><span class="traceContains">+mem: storing 94 in location 30</span>
<span id="L187" class="LineNr">187 </span>
<span id="L188" class="LineNr">188 </span><span class="Delimiter">:(scenario get_indirect2)</span>
<span id="L189" class="LineNr">189 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L190" class="LineNr">190 </span> <span class="Comment"># skip alloc id for 10:&amp;:point</span>
<span id="L191" class="LineNr">191 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L192" class="LineNr">192 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L193" class="LineNr">193 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L194" class="LineNr">194 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L195" class="LineNr">195 </span> <span class="Comment"># skip alloc id for destination</span>
<span id="L196" class="LineNr">196 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">40</span>
<span id="L197" class="LineNr">197 </span> <span class="Constant">30</span>:&amp;:num/lookup<span class="Special"> &lt;- </span>get <span class="Constant">10</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
<span id="L198" class="LineNr">198 </span>]
<span id="L199" class="LineNr">199 </span><span class="traceContains">+mem: storing 94 in location 41</span>
<span id="L200" class="LineNr">200 </span>
<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(scenario include_nonlookup_properties)</span>
<span id="L202" class="LineNr">202 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L203" class="LineNr">203 </span> <span class="Comment"># skip alloc id for 10:&amp;:point</span>
<span id="L204" class="LineNr">204 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L205" class="LineNr">205 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L206" class="LineNr">206 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L207" class="LineNr">207 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L208" class="LineNr">208 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">10</span>:&amp;:point/lookup/foo<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
<span id="L209" class="LineNr">209 </span>]
<span id="L210" class="LineNr">210 </span><span class="traceContains">+mem: storing 94 in location 30</span>
<span id="L211" class="LineNr">211 </span>
<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(after &quot;Update GET base in Check&quot;)</span>
<span id="L213" class="LineNr">213 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(after &quot;Update GET product in Check&quot;)</span>
<span id="L215" class="LineNr">215 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(after &quot;Update GET base in Run&quot;)</span>
<span id="L217" class="LineNr">217 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
<span id="L218" class="LineNr">218 </span>
<span id="L219" class="LineNr">219 </span><span class="Delimiter">:(scenario put_indirect)</span>
<span id="L220" class="LineNr">220 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L221" class="LineNr">221 </span> <span class="Comment"># skip alloc id for 10:&amp;:point</span>
<span id="L222" class="LineNr">222 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L223" class="LineNr">223 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L224" class="LineNr">224 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L225" class="LineNr">225 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L226" class="LineNr">226 </span> <span class="Constant">10</span>:&amp;:point/lookup<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">10</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span><span class="Delimiter">,</span> <span class="Constant">96</span>
<span id="L227" class="LineNr">227 </span>]
<span id="L228" class="LineNr">228 </span><span class="traceContains">+mem: storing 96 in location 21</span>
<span id="L229" class="LineNr">229 </span>
<span id="L230" class="LineNr">230 </span><span class="Delimiter">:(after &quot;Update PUT base in Check&quot;)</span>
<span id="L231" class="LineNr">231 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L232" class="LineNr">232 </span><span class="Delimiter">:(after &quot;Update PUT offset in Check&quot;)</span>
<span id="L233" class="LineNr">233 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L234" class="LineNr">234 </span><span class="Delimiter">:(after &quot;Update PUT base in Run&quot;)</span>
<span id="L235" class="LineNr">235 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
<span id="L236" class="LineNr">236 </span>
<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(scenario put_product_error_with_lookup)</span>
<span id="L238" class="LineNr">238 </span><span class="Special">% Hide_errors = true;</span>
<span id="L239" class="LineNr">239 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L240" class="LineNr">240 </span> <span class="Comment"># skip alloc id for 10:&amp;:point</span>
<span id="L241" class="LineNr">241 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L242" class="LineNr">242 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L243" class="LineNr">243 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L244" class="LineNr">244 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L245" class="LineNr">245 </span> <span class="Constant">10</span>:&amp;:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">10</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">96</span>
<span id="L246" class="LineNr">246 </span>]
<span id="L247" class="LineNr">247 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put' must be first ingredient '10:&amp;:point/lookup', but got '10:&amp;:point'</span>
<span id="L248" class="LineNr">248 </span>
<span id="L249" class="LineNr">249 </span><span class="Delimiter">:(before &quot;End PUT Product Checks&quot;)</span>
<span id="L250" class="LineNr">250 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> p = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L251" class="LineNr">251 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>p<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span>
<span id="L252" class="LineNr">252 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> i = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L253" class="LineNr">253 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span>
<span id="L254" class="LineNr">254 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>p<span class="Delimiter">,</span> i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L255" class="LineNr">255 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of 'put' must be first ingredient '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L256" class="LineNr">256 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L257" class="LineNr">257 </span><span class="Delimiter">}</span>
<span id="L258" class="LineNr">258 </span>
<span id="L259" class="LineNr">259 </span><span class="Delimiter">:(scenario new_error)</span>
<span id="L260" class="LineNr">260 </span><span class="Special">% Hide_errors = true;</span>
<span id="L261" class="LineNr">261 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L262" class="LineNr">262 </span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
<span id="L263" class="LineNr">263 </span>]
<span id="L264" class="LineNr">264 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:num/raw &lt;- new num:type'</span>
<span id="L265" class="LineNr">265 </span>
<span id="L266" class="LineNr">266 </span><span class="Delimiter">:(after &quot;Update NEW product in Check&quot;)</span>
<span id="L267" class="LineNr">267 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
<span id="L268" class="LineNr">268 </span>
<span id="L269" class="LineNr">269 </span><span class="Delimiter">:(scenario copy_array_indirect)</span>
<span id="L270" class="LineNr">270 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L271" class="LineNr">271 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span>
<span id="L272" class="LineNr">272 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L273" class="LineNr">273 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L274" class="LineNr">274 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L275" class="LineNr">275 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L276" class="LineNr">276 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L277" class="LineNr">277 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L278" class="LineNr">278 </span> <span class="Constant">30</span>:@:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:@:num/lookup
<span id="L279" class="LineNr">279 </span>]
<span id="L280" class="LineNr">280 </span><span class="traceContains">+mem: storing 3 in location 30</span>
<span id="L281" class="LineNr">281 </span><span class="traceContains">+mem: storing 94 in location 31</span>
<span id="L282" class="LineNr">282 </span><span class="traceContains">+mem: storing 95 in location 32</span>
<span id="L283" class="LineNr">283 </span><span class="traceContains">+mem: storing 96 in location 33</span>
<span id="L284" class="LineNr">284 </span>
<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(scenario create_array_indirect)</span>
<span id="L286" class="LineNr">286 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L287" class="LineNr">287 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num:3</span>
<span id="L288" class="LineNr">288 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3000</span>
<span id="L289" class="LineNr">289 </span> <span class="Constant">10</span>:&amp;:array:num:<span class="Constant">3</span>/lookup<span class="Special"> &lt;- </span>create-array
<span id="L290" class="LineNr">290 </span>]
<span id="L291" class="LineNr">291 </span><span class="traceContains">+mem: storing 3 in location 3001</span>
<span id="L292" class="LineNr">292 </span>
<span id="L293" class="LineNr">293 </span><span class="Delimiter">:(after &quot;Update CREATE_ARRAY product in Check&quot;)</span>
<span id="L294" class="LineNr">294 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L295" class="LineNr">295 </span><span class="Delimiter">:(after &quot;Update CREATE_ARRAY product in Run&quot;)</span>
<span id="L296" class="LineNr">296 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>product<span class="Delimiter">);</span>
<span id="L297" class="LineNr">297 </span>
<span id="L298" class="LineNr">298 </span><span class="Delimiter">:(scenario index_indirect)</span>
<span id="L299" class="LineNr">299 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L300" class="LineNr">300 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span>
<span id="L301" class="LineNr">301 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L302" class="LineNr">302 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L303" class="LineNr">303 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L304" class="LineNr">304 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L305" class="LineNr">305 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L306" class="LineNr">306 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L307" class="LineNr">307 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L308" class="LineNr">308 </span>]
<span id="L309" class="LineNr">309 </span><span class="traceContains">+mem: storing 95 in location 30</span>
<span id="L310" class="LineNr">310 </span>
<span id="L311" class="LineNr">311 </span><span class="Delimiter">:(before &quot;Update INDEX base in Check&quot;)</span>
<span id="L312" class="LineNr">312 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L313" class="LineNr">313 </span><span class="Delimiter">:(before &quot;Update INDEX index in Check&quot;)</span>
<span id="L314" class="LineNr">314 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L315" class="LineNr">315 </span><span class="Delimiter">:(before &quot;Update INDEX product in Check&quot;)</span>
<span id="L316" class="LineNr">316 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L317" class="LineNr">317 </span>
<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;Update INDEX base in Run&quot;)</span>
<span id="L319" class="LineNr">319 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;Update INDEX index in Run&quot;)</span>
<span id="L321" class="LineNr">321 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L322" class="LineNr">322 </span>
<span id="L323" class="LineNr">323 </span><span class="Delimiter">:(scenario put_index_indirect)</span>
<span id="L324" class="LineNr">324 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L325" class="LineNr">325 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span>
<span id="L326" class="LineNr">326 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L327" class="LineNr">327 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L328" class="LineNr">328 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L329" class="LineNr">329 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L330" class="LineNr">330 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L331" class="LineNr">331 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L332" class="LineNr">332 </span> <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">97</span>
<span id="L333" class="LineNr">333 </span>]
<span id="L334" class="LineNr">334 </span><span class="traceContains">+mem: storing 97 in location 23</span>
<span id="L335" class="LineNr">335 </span>
<span id="L336" class="LineNr">336 </span><span class="Delimiter">:(scenario put_index_indirect_2)</span>
<span id="L337" class="LineNr">337 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L338" class="LineNr">338 </span> <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L339" class="LineNr">339 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L340" class="LineNr">340 </span> <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L341" class="LineNr">341 </span> <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L342" class="LineNr">342 </span> <span class="Comment"># skip alloc id for address</span>
<span id="L343" class="LineNr">343 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">30</span>
<span id="L344" class="LineNr">344 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L345" class="LineNr">345 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span> <span class="Comment"># index</span>
<span id="L346" class="LineNr">346 </span> <span class="Constant">10</span>:@:num<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:@:num<span class="Delimiter">,</span> <span class="Constant">20</span>:&amp;:num/lookup<span class="Delimiter">,</span> <span class="Constant">97</span>
<span id="L347" class="LineNr">347 </span>]
<span id="L348" class="LineNr">348 </span><span class="traceContains">+mem: storing 97 in location 12</span>
<span id="L349" class="LineNr">349 </span>
<span id="L350" class="LineNr">350 </span><span class="Delimiter">:(scenario put_index_product_error_with_lookup)</span>
<span id="L351" class="LineNr">351 </span><span class="Special">% Hide_errors = true;</span>
<span id="L352" class="LineNr">352 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L353" class="LineNr">353 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span>
<span id="L354" class="LineNr">354 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L355" class="LineNr">355 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L356" class="LineNr">356 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L357" class="LineNr">357 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L358" class="LineNr">358 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L359" class="LineNr">359 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L360" class="LineNr">360 </span> <span class="Constant">10</span>:&amp;:@:num<span class="Special"> &lt;- </span>put-index <span class="Constant">10</span>:&amp;:@:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
<span id="L361" class="LineNr">361 </span>]
<span id="L362" class="LineNr">362 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put-index' must be first ingredient '10:&amp;:@:num/lookup', but got '10:&amp;:@:num'</span>
<span id="L363" class="LineNr">363 </span>
<span id="L364" class="LineNr">364 </span><span class="Delimiter">:(before &quot;End PUT_INDEX Product Checks&quot;)</span>
<span id="L365" class="LineNr">365 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> p = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L366" class="LineNr">366 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>p<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span>
<span id="L367" class="LineNr">367 </span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> i = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L368" class="LineNr">368 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Comment">// error raised elsewhere</span>
<span id="L369" class="LineNr">369 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>p<span class="Delimiter">,</span> i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L370" class="LineNr">370 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of 'put-index' must be first ingredient '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L371" class="LineNr">371 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L372" class="LineNr">372 </span><span class="Delimiter">}</span>
<span id="L373" class="LineNr">373 </span>
<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(scenario dilated_reagent_in_static_array)</span>
<span id="L375" class="LineNr">375 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L376" class="LineNr">376 </span> <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span>&amp; num<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)}</span><span class="Special"> &lt;- </span>create-array
<span id="L377" class="LineNr">377 </span> <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
<span id="L378" class="LineNr">378 </span> <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span>&amp; num<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)}</span><span class="Special"> &lt;- </span>put-index <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span>&amp; num<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)},</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">10</span>:&amp;:num
<span id="L379" class="LineNr">379 </span> *<span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L380" class="LineNr">380 </span> <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy *<span class="Constant">10</span>:&amp;:num
<span id="L381" class="LineNr">381 </span>]
<span id="L382" class="LineNr">382 </span><span class="traceContains">+run: creating array from 7 locations</span>
<span id="L383" class="LineNr">383 </span><span class="traceContains">+mem: storing 94 in location 20</span>
<span id="L384" class="LineNr">384 </span>
<span id="L385" class="LineNr">385 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX base in Check&quot;)</span>
<span id="L386" class="LineNr">386 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L387" class="LineNr">387 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX index in Check&quot;)</span>
<span id="L388" class="LineNr">388 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L389" class="LineNr">389 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX value in Check&quot;)</span>
<span id="L390" class="LineNr">390 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>value<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L391" class="LineNr">391 </span>
<span id="L392" class="LineNr">392 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX base in Run&quot;)</span>
<span id="L393" class="LineNr">393 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
<span id="L394" class="LineNr">394 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX index in Run&quot;)</span>
<span id="L395" class="LineNr">395 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>index<span class="Delimiter">);</span>
<span id="L396" class="LineNr">396 </span>
<span id="L397" class="LineNr">397 </span><span class="Delimiter">:(scenario length_indirect)</span>
<span id="L398" class="LineNr">398 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L399" class="LineNr">399 </span> <span class="Comment"># skip alloc id for 10:&amp;:@:num</span>
<span id="L400" class="LineNr">400 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L401" class="LineNr">401 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L402" class="LineNr">402 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span> <span class="Comment"># array length</span>
<span id="L403" class="LineNr">403 </span> <span class="Constant">22</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L404" class="LineNr">404 </span> <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
<span id="L405" class="LineNr">405 </span> <span class="Constant">24</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">96</span>
<span id="L406" class="LineNr">406 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>length <span class="Constant">10</span>:&amp;:array:num/lookup
<span id="L407" class="LineNr">407 </span>]
<span id="L408" class="LineNr">408 </span><span class="traceContains">+mem: storing 3 in location 30</span>
<span id="L409" class="LineNr">409 </span>
<span id="L410" class="LineNr">410 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Check&quot;)</span>
<span id="L411" class="LineNr">411 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>array<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L412" class="LineNr">412 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Run&quot;)</span>
<span id="L413" class="LineNr">413 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>array<span class="Delimiter">);</span>
<span id="L414" class="LineNr">414 </span>
<span id="L415" class="LineNr">415 </span><span class="Delimiter">:(scenario maybe_convert_indirect)</span>
<span id="L416" class="LineNr">416 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L417" class="LineNr">417 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span>
<span id="L418" class="LineNr">418 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L419" class="LineNr">419 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L420" class="LineNr">420 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span>
<span id="L421" class="LineNr">421 </span> <span class="Constant">30</span>:num<span class="Delimiter">,</span> <span class="Constant">31</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
<span id="L422" class="LineNr">422 </span>]
<span id="L423" class="LineNr">423 </span><span class="traceContains">+mem: storing 1 in location 31</span>
<span id="L424" class="LineNr">424 </span><span class="traceContains">+mem: storing 94 in location 30</span>
<span id="L425" class="LineNr">425 </span>
<span id="L426" class="LineNr">426 </span><span class="Delimiter">:(scenario maybe_convert_indirect_2)</span>
<span id="L427" class="LineNr">427 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L428" class="LineNr">428 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span>
<span id="L429" class="LineNr">429 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L430" class="LineNr">430 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L431" class="LineNr">431 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span>
<span id="L432" class="LineNr">432 </span> <span class="Comment"># skip alloc id for 30:&amp;:num</span>
<span id="L433" class="LineNr">433 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">40</span>
<span id="L434" class="LineNr">434 </span> <span class="Constant">30</span>:&amp;:num/lookup<span class="Delimiter">,</span> <span class="Constant">50</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
<span id="L435" class="LineNr">435 </span>]
<span id="L436" class="LineNr">436 </span><span class="traceContains">+mem: storing 1 in location 50</span>
<span id="L437" class="LineNr">437 </span><span class="traceContains">+mem: storing 94 in location 41</span>
<span id="L438" class="LineNr">438 </span>
<span id="L439" class="LineNr">439 </span><span class="Delimiter">:(scenario maybe_convert_indirect_3)</span>
<span id="L440" class="LineNr">440 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L441" class="LineNr">441 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span>
<span id="L442" class="LineNr">442 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L443" class="LineNr">443 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L444" class="LineNr">444 </span> <span class="Constant">21</span>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">94</span>
<span id="L445" class="LineNr">445 </span> <span class="Comment"># skip alloc id for 30:&amp;:bool</span>
<span id="L446" class="LineNr">446 </span> <span class="Constant">31</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">40</span>
<span id="L447" class="LineNr">447 </span> <span class="Constant">50</span>:num<span class="Delimiter">,</span> <span class="Constant">30</span>:&amp;:<span class="Normal">bool</span>/lookup<span class="Special"> &lt;- </span>maybe-convert <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
<span id="L448" class="LineNr">448 </span>]
<span id="L449" class="LineNr">449 </span><span class="traceContains">+mem: storing 1 in location 41</span>
<span id="L450" class="LineNr">450 </span><span class="traceContains">+mem: storing 94 in location 50</span>
<span id="L451" class="LineNr">451 </span>
<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Check&quot;)</span>
<span id="L453" class="LineNr">453 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L454" class="LineNr">454 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Check&quot;)</span>
<span id="L455" class="LineNr">455 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Check&quot;)</span>
<span id="L457" class="LineNr">457 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>status<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L458" class="LineNr">458 </span>
<span id="L459" class="LineNr">459 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Run&quot;)</span>
<span id="L460" class="LineNr">460 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
<span id="L461" class="LineNr">461 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Run&quot;)</span>
<span id="L462" class="LineNr">462 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>product<span class="Delimiter">);</span>
<span id="L463" class="LineNr">463 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Run&quot;)</span>
<span id="L464" class="LineNr">464 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>status<span class="Delimiter">);</span>
<span id="L465" class="LineNr">465 </span>
<span id="L466" class="LineNr">466 </span><span class="Delimiter">:(scenario merge_exclusive_container_indirect)</span>
<span id="L467" class="LineNr">467 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L468" class="LineNr">468 </span> <span class="Comment"># skip alloc id for 10:&amp;:number-or-point</span>
<span id="L469" class="LineNr">469 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L470" class="LineNr">470 </span> <span class="Constant">10</span>:&amp;:number-<span class="Normal">or</span>-point/lookup<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/number<span class="Delimiter">,</span> <span class="Constant">34</span>
<span id="L471" class="LineNr">471 </span>]
<span id="L472" class="LineNr">472 </span><span class="Comment"># skip alloc id</span>
<span id="L473" class="LineNr">473 </span><span class="traceContains">+mem: storing 0 in location 21</span>
<span id="L474" class="LineNr">474 </span><span class="traceContains">+mem: storing 34 in location 22</span>
<span id="L475" class="LineNr">475 </span>
<span id="L476" class="LineNr">476 </span><span class="Delimiter">:(before &quot;Update size_mismatch Check for MERGE(x)</span>
<span id="L477" class="LineNr">477 </span><a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
<span id="L478" class="LineNr">478 </span>
<span id="L479" class="LineNr">479 </span><span class="Comment">//: abbreviation for '/lookup': a prefix '*'</span>
<span id="L480" class="LineNr">480 </span>
<span id="L481" class="LineNr">481 </span><span class="Delimiter">:(scenario lookup_abbreviation)</span>
<span id="L482" class="LineNr">482 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
<span id="L483" class="LineNr">483 </span> <span class="Comment"># skip alloc id for 10:&amp;:num</span>
<span id="L484" class="LineNr">484 </span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>
<span id="L485" class="LineNr">485 </span> <span class="Comment"># skip alloc id for payload</span>
<span id="L486" class="LineNr">486 </span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
<span id="L487" class="LineNr">487 </span> <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>copy *<span class="Constant">10</span>:&amp;:num
<span id="L488" class="LineNr">488 </span>]
<span id="L489" class="LineNr">489 </span><span class="traceContains">+parse: ingredient: {10: (&quot;&amp;&quot; &quot;num&quot;), &quot;lookup&quot;: ()}</span>
<span id="L490" class="LineNr">490 </span><span class="traceContains">+mem: storing 94 in location 30</span>
<span id="L491" class="LineNr">491 </span>
<span id="L492" class="LineNr">492 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span>
<span id="L493" class="LineNr">493 </span><span class="Delimiter">{</span>
<span id="L494" class="LineNr">494 </span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;*&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L495" class="LineNr">495 </span> name<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L496" class="LineNr">496 </span> properties<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span><span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
<span id="L497" class="LineNr">497 </span> <span class="Delimiter">}</span>
<span id="L498" class="LineNr">498 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
<span id="L499" class="LineNr">499 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal name '&quot;</span> &lt;&lt; original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L500" class="LineNr">500 </span><span class="Delimiter">}</span>
<span id="L501" class="LineNr">501 </span>
<span id="L502" class="LineNr">502 </span><span class="SalientComment">//:: helpers for debugging</span>
<span id="L503" class="LineNr">503 </span>
<span id="L504" class="LineNr">504 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L505" class="LineNr">505 </span>_DUMP<span class="Delimiter">,</span>
<span id="L506" class="LineNr">506 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L507" class="LineNr">507 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;$dump&quot;</span><span class="Delimiter">,</span> _DUMP<span class="Delimiter">);</span>
<span id="L508" class="LineNr">508 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L509" class="LineNr">509 </span><span class="Normal">case</span> _DUMP: <span class="Delimiter">{</span>
<span id="L510" class="LineNr">510 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> after_canonize = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L511" class="LineNr">511 </span> <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>after_canonize<span class="Delimiter">);</span>
<span id="L512" class="LineNr">512 </span> cerr &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L513" class="LineNr">513 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L514" class="LineNr">514 </span><span class="Delimiter">}</span>
<span id="L515" class="LineNr">515 </span>
<span id="L516" class="LineNr">516 </span><span class="Comment">//: grab an address, and then dump its value at intervals</span>
<span id="L517" class="LineNr">517 </span><span class="Comment">//: useful for tracking down memory corruption (writing to an out-of-bounds address)</span>
<span id="L518" class="LineNr">518 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L519" class="LineNr">519 </span><span class="Normal">int</span> <span class="Special">Bar</span> = -<span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L520" class="LineNr">520 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L521" class="LineNr">521 </span>_BAR<span class="Delimiter">,</span>
<span id="L522" class="LineNr">522 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L523" class="LineNr">523 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;$bar&quot;</span><span class="Delimiter">,</span> _BAR<span class="Delimiter">);</span>
<span id="L524" class="LineNr">524 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L525" class="LineNr">525 </span><span class="Normal">case</span> _BAR: <span class="Delimiter">{</span>
<span id="L526" class="LineNr">526 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L527" class="LineNr">527 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Bar</span> != -<span class="Constant">1</span><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Special">Bar</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> <span class="Special">Bar</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L528" class="LineNr">528 </span> <span class="Normal">else</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L529" class="LineNr">529 </span> <span class="Delimiter">}</span>
<span id="L530" class="LineNr">530 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L531" class="LineNr">531 </span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> tmp = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L532" class="LineNr">532 </span> <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>tmp<span class="Delimiter">);</span>
<span id="L533" class="LineNr">533 </span> <span class="Special">Bar</span> = tmp<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
<span id="L534" class="LineNr">534 </span> <span class="Delimiter">}</span>
<span id="L535" class="LineNr">535 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L536" class="LineNr">536 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->